home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-03-08 | 70.9 KB | 3,276 lines |
- **************************************************************************
- * *
- * MOUSE-KA-MANIA! *
- * *
- * by Charles F. Johnson *
- * *
- * Copyright 1987 Charles F. Johnson & Little Green Footballs Software. *
- * All rights reserved. *
- * *
- * This source code is for the MADMAC assembler. *
- * *
- **************************************************************************
-
- * -----------------------------------
- * Last revision: 08/27/87 13:14:48
- * -----------------------------------
-
- .include "C:\\AS68\\OBJECT.S"
-
- * Object index equates
-
- savebt = 22
- loadbt = 29
- clrmbt = 30
- clrdbt = 23
- invdbt = 24
- invmbt = 31
- upbt = 11
- leftbt = 12
- downbt = 18
- ritebt = 13
- mirdbt = 25
- mirmbt = 32
- exitbt = 26
- instbt = 5
- remvbt = 6
- undobt = 27
- rotbt = 28
- cdowbt = 8
- cupbt = 10
- colval = 9
- colttl = 7
- frmttl = 14
- frdown = 15
- frup = 17
- frmval = 16
- anonof = 21
-
- loinst = 3
- loremv = 7
- loexit = 11
- locolr = 10
- lodown = 12
- locval = 13
- loup = 14
- losvbt = 5
-
- * Guaranteed memory locations
-
- ipl_vec = $70 ; System vertical blank vector
- sshiftmod = $44C ; System resolution variable
-
- * These locations are undocumented, and are not guaranteed to remain the same
- * in future versions of TOS. However, they are referenced by negative
- * offsets from the Line A variable areas, and they do work with the version
- * of TOS in the Mega ST.
-
- ignore = -$153 ; Negative offset to mouse packet ignore flag
- but_stat = -$15C ; Offset to mouse button status variable
- mouse_x = -$25A ; Mouse X location (pokeable)
-
- .text
-
- move.l #ustack,a7 ; Accessory initialization
-
- dc.w $A000 ; Line A init
- move.l a0,line_a
-
- move.l #ap1rsv,a5
- clr.l (a5) ; appl_init
- clr.l 4(a5)
- clr.l 8(a5)
- clr.l 12(a5)
- move.l #a_init,aespb
- bsr aes
-
- move.l #m_reg,aespb ; menu_register
- move intout,intin
- move.l #accmsg,addrin
- bsr aes
- move intout,menuid ; Save menu ID number
-
- move.l #g_hand,aespb ; graph_handle
- bsr aes
- move intout,ghandl
-
- move.l #e_timr,aespb ; Call evnt_timer to let GEM finish doing
- clr.l intin ; whatever the heck it does to initialize
- bsr aes ; (Wait for _zero_ milliseconds)
-
- move.l #g_mous,aespb ; Set arrow cursor so we can search for it
- clr.w intin
- bsr aes
-
- move.l #$2000,a5 ; Start searching for the mouse definition
- sm_1: move.l #arrow_data,a4 ; Pointer to my arrow data
- move #31,d5 ; 32 words to check
- sm_2: move.w (a5),d0 ; Get a word
- cmp.w (a4),d0 ; Match first word of arrow definition?
- beq.s sm_3 ; Yes, check the rest
- addq #2,a5 ; Increment pointer
- bra sm_2
- sm_3: move.l a5,a0 ; Save address of first match
- sm_4: cmp.w (a5)+,(a4)+ ; See if we have the whole mouse here
- bne sm_1
- dbf d5,sm_4
- move.l a0,sprtad ; Found it! Save mouse sprite buffer address
-
- move.l #r_obfx,aespb ; Adjust coordinates in editor object tree
- move.l #editbx,addrin
- move #objnum,d5
- fxedt: move d5,intin
- bsr aes
- dbf d5,fxedt
-
- move.l #lowbox,addrin ; Now adjust the low res object tree
- move #lo_num,d5
- fxlow: move d5,intin
- bsr aes
- dbf d5,fxlow
-
- move #4,-(sp) ; Get resolution
- trap #14
- addq #2,sp
-
- cmp.w #2,d0 ; Hi res?
- bne.s ckmed1 ; No, skip
- move.l #hi_val,valsav ; Save address of color translation table
- bra.s savres ; based on the current resolution
- ckmed1: cmp.w #1,d0
- bne.s cklow1
- move.l #med_val,valsav
- bra.s savres
- cklow1: move.l #low_val,valsav
- savres: move d0,o_res ; Save boot resolution
-
- cmp.w #2,d0 ; High res?
- beq.s hi1 ; Yes, skip
- move.l #y_off,a0 ; Adjust the Y coordinate variables
- move #4,d5 ; 5 of these
- adjres: lsr.w (a0)+ ; Divide by 2
- dbf d5,adjres
- move.w #160,y_scr
-
- hi1: subq.w #4,upco ; Adjust the positions of a few objects
- subq.w #4,leftco
- subq.w #4,riteco
- subq.w #4,downco
- addq.w #2,datco
- addq.w #2,mskco
- cmp.w #2,d0 ; d0 still holds resolution (right?)
- bne.s med1 ; Not hi res, skip
- addq.w #3,cop_co+2
- subq.w #3,footco+2 ; Shuffle them objects!
- subq.w #6,leftco+2
- subq.w #6,riteco+2
- sub.w #12,downco+2
- bra.s fsel_search
- med1: subq.w #3,leftco+2 ; Have to move 'em by different amounts
- subq.w #3,riteco+2 ; in medium res
- subq.w #6,downco+2
- move #4,filhot ; Set medium res hot spot fill style
- move #4,fillst ; Set mask fill style
- move #4,celsiz ; Editing grid cell size
- move #2,planes ; Number of color planes
-
- fsel_search:
- clr.w fsflag ; Clear "search failed" flag
- move.l #$A000,a5 ; Start searching at $A000
- s_1: move.l #itmtxt,a4 ; Get pointer to search string ("ITEM SELECTOR")
- move #12,d5 ; Get number of bytes to search for
- s_2: move.b (a5),d0 ; Get a character
- cmp.b (a4),d0 ; Is it "I"?
- beq.s s_3 ; Yes, check for rest of string
- addq #1,a5 ; Increment the pointer
- cmp.l #$40000,a5
- bne s_2
- bra.s s_6 ; Keep searching
- s_3: move.l a5,a0 ; Save address of first match
- s_4: cmp.b (a5)+,(a4)+ ; See if we have the whole string
- bne s_1 ; No, go search more
- dbf d5,s_4 ; Count down and loop
- tst.b 13(a0) ; There should be a zero after it
- bne s_1
-
- s4_2: move.l a0,d0 ; Found it! Save address of text in d0
- move.l a0,iasav
- move.l a0,d1 ; Move address to d1 so we can manipulate it
- bclr #0,d1 ; Clear odd bit
- move.l d1,a0 ; Back to a0
- s_5: subq #2,a0 ; Decrement the pointer to memory
- cmp.l #$A000,a0 ; Back at the start already?
- beq.s s_6 ; Yes, skip ahead
- move.l (a0),d1 ; Get a longword
- cmp.l d1,d0 ; Is this the pointer to "ITEM SELECTOR"?
- bne s_5 ; No, search more
- move.l a0,itmadr ; Save address of pointer
- move 8(a0),ilensv ; Save original string length
- bra.s search
-
- s_6: move #1,fsflag ; Set flag to indicate search failure
-
- search:
- clr.w lowflg
- cmp.w #2,o_res ; High res?
- beq getdrv ; Yes, skip this
- move.l #$A000,a5
- sr_1: move.l #restxt,a4 ; Find object spec of "Low" button in the
- move #14,d5 ; "Set Preferences" desktop dialog box
- sr_2: move.b (a5),d0
- cmp.b (a4),d0
- beq.s sr_3
- addq #1,a5
- cmp.l #$40000,a5
- beq.s sr_6
- bra sr_2
- sr_3: move.l a5,a0
- sr_4: cmp.b (a5)+,(a4)+
- bne sr_1
- dbf d5,sr_4
- tst.b 15(a0) ; Once again, there has to be a zero after it
- bne sr_1
-
- move.l a0,d0
- move.l a0,d1
- bclr #0,d1
- move.l d1,a0
- sr_5: subq #2,a0
- cmp.l #$A000,a0
- beq.s sr_6
- move.l (a0),d1
- cmp.l d1,d0
- bne sr_5
- subq #2,a0 ; Point to status word of "Low" button
- move.l a0,d0
- sub.l #96,d0 ; Get pointer to status word of "OK" button
- move.l d0,res_okptr
- cmp.w #2,o_res
- beq.s set_lo
- tst.w o_res
- beq.s set_me
- set_lo: clr.l d0
- bra.s mult24
- set_me: move.l #1,d0
- mult24: mulu #24,d0 ; Compute the index to the button that
- add.l d0,a0 ; should NOT be selected
- move.l a0,res_optr ; Save pointer to its status word
- bra.s getdrv
-
- sr_6: move #1,lowflg
-
- getdrv: move #$19,-(sp) ; Get current drive
- trap #1
- addq #2,sp
- add.b #65,d0 ; Convert to ASCII
- move.l #savdir,a4
- move.l #svadir,a2
- move.l #loddir,a5
- move.l #loadir,a3
- move.b d0,(a2)+
- move.b d0,(a3)+
- move.b d0,(a4)+
- move.b d0,(a5)+
- move.l #datext,a0
- move.l #aniext,a1
- move #7,d5
- cpydir: move.b (a0),(a4)+ ; Move in the rest of the directory lines
- move.b (a0)+,(a5)+
- move.b (a1),(a2)+
- move.b (a1)+,(a3)+
- dbf d5,cpydir
-
- clr.w colflg ; Clear color change flag
- clr.w insflg ; Clear installed flag
- clr.w antflg ; Clear animation title flag
- clr.w onoff ; Clear animation on/off flag
- clr.w franum ; Clear frame number
- clr.w moucnt
- clr.w vbi_on
- clr.w diflag
- move.w #1,nframs ; Set number of frames in loop
-
- tst.w o_res ; Are we in low res?
- bne.s rdef1 ; No, skip
- move.l #lowdef,a5 ; Set address of default mouse filename
- bra.s rdef3 ; based on current res
- rdef1: cmp.w #1,o_res
- bne.s rdef2
- move.l #meddef,a5
- bra.s rdef3
- rdef2: move.l #hidef,a5
- rdef3: move.l a5,filadr
- bsr sav_exist
- bmi no_def
- cmp.l #74,dta+26 ; Is it a data file? (74 bytes)
- beq rdef4 ; Yes, skip
- bsr open_file ; Open the file
- bmi no_def ; Error, bail
- move d0,fhandl
- move.l #mouse_array,a5 ; Set address of mouse animation array
- move.l #74*32,d5 ; Length of data
- bsr read_file
- bmi no_def
- move.l #nframs,a5 ; Now read number of frames
- move.l #2,d5
- bsr read_file
- move.l #delval,a5 ; And delay value
- bsr read_file
- bsr clos_file
- cmp.w #32,nframs ; # of frames greater than 32?
- bhi.s rdef3_0 ; Yes, exit
- cmp.w #99,delval
- bhi.s rdef3_0
- move.l #mouse_array,a0
- move #31,d0
- ckdanf: cmp.w #15,(a0) ; Check all hotspot positions
- bhi.s rdef3_0 ; and color values
- cmp.w #15,2(a0)
- bhi.s rdef3_0
- cmp.w #15,6(a0)
- bhi.s rdef3_0
- cmp.w #15,8(a0)
- bhi.s rdef3_0
- add.l #74,a0
- dbf d0,ckdanf
- bra.s rdef3_1
-
- rdef3_0:
- bsr clear_array
- bra.s no_def
-
- rdef3_1:
- bsr arr_2_frm ; Copy first frame to editing area
- bsr init_nfrm ; Initialize frame number box
- move.l #anonms,tinf5 ; Set "Animation ON" message
- move.w delval,vbtimr ; Set the vertical blank timer
- clr.w moucnt ; Clear the frame counter
- move #1,onoff ; Now set the animation flag
- bra.s rdef5
-
- rdef4: bsr open_file ; Try to open default mouse file
- bmi.s no_def ; Error, assume file not found
- move d0,fhandl ; Save handle
- move.l #mouse_form,a5 ; Read mouse data from file
- move.l #74,d5
- bsr read_file
- bsr clos_file ; Close it
-
- rdef5: bsr cpy_inst ; Copy it to the "installed" area
- bsr frm_2_arr
-
- bsr init_col ; Initialize the color indicators
- move #1,insflg ; Set installed flag
-
- no_def: bsr copy_mouse ; Initialize the undo buffer
-
- pea save_vbv
- move.w #38,-(sp)
- trap #14
- addq #6,sp
-
- tst.w insflg ; Mouse installed?
- beq.s evntms ; No, skip
-
- move #1,vbi_on ; Turn on the vertical blank interrupt
-
- evntms: move.l #e_mesg,aespb ; Wait for GEM to send us a message
- move.l #mspipe,addrin
- bsr aes
-
- cmp.w #40,mspipe ; Is this an AC_OPEN message?
- bne evntms ; No, go back
- move mspipe+8,d0 ; Is it for this accessory?
- cmp.w menuid,d0
- bne evntms ; No, go back
-
- move.l #w_updt,aespb ; Call wind_update to block user actions
- move #1,intin
- bsr aes
-
- move #2,-(sp) ; Get address of screen RAM
- trap #14
- addq #2,sp
- move.l d0,screen ; Save it
-
- move #$19,-(sp) ; Get current drive
- trap #1
- addq #2,sp
- move d0,curdrv ; Save it
-
- clr.w -(sp) ; Get current pathname
- move.l #curpth,-(sp)
- move #$47,-(sp)
- trap #1
- addq #8,sp
-
- move #4,-(sp) ; Get current resolution
- trap #14
- addq #2,sp
- move.w d0,res
-
- tst.w d0 ; Low res?
- bne continue ; No, forge ahead
-
- bsr open_window
-
- tst d0
- bmi alrtx1
-
- tst onoff ; Animation on?
- bne.s arroff ; Yes, turn off color change box
- tst.w insflg ; Is a mouse installed?
- bne.s arr_on ; Yes, skip ahead
-
- arroff: move #DISABLED,locstt ; Disable the color change box
- move #DISABLED,lodstt
- move #DISABLED,loustt
- move #DISABLED,losstt
- move.l #blnkms,lovadr
- bra.s dolbox ; And continue
- arr_on: move #NORMAL,locstt ; Enable the color change box
- move #NORMAL,lodstt
- move #NORMAL,loustt
- move #NORMAL,losstt
- tst colflg
- bne.s ao_1
- move.l #dvalms,lovadr
- bra.s dolbox
- ao_1: move.l #mvalms,lovadr
-
- dolbox: move.l #lowbox,addrin ; Draw the low res dialog box
- bsr drawbx
- move #1,diflag
- loinpt: bsr formdo ; Get user input
-
- bclr #7,intout ; Clear high bit in case of double-click
- cmp.w #loinst,intout ; 'Install' button selected?
- bne alrt0 ; No, skip
-
- move #NORMAL,loistt ; De-select it
-
- clr.w adflag
- move.l #dat_or_ani,a5 ; Show alert box
- clr d5
- bsr alert
- cmp.w #1,intout ; Animation file?
- bne.s l_lo1
- move #1,adflag
- bsr fsl_aload
- bra.s l_lo2
- l_lo1: bsr fsl_dload ; Set up fsel strings
- l_lo2: bsr fsel ; Go call the dreaded File Selector
-
- move.l filadr,a0
- tst.b (a0) ; Got a filename?
- beq dolbox ; No, exit
- cmp.w #1,intout+2 ; OK button?
- bne dolbox ; No, exit
-
- bsr set_path ; Set drive and path
-
- move.l filadr,a5 ; Load the mouse cursor file
- bsr open_file
- bmi alrtx ; Error, bail out-ski
- move d0,fhandl ; Save file handle
-
- tst adflag
- beq.s l_lo3
- bsr chk_anfile
- tst.w a_good
- beq.s lo_a0
- move.l #notani,a5
- move #1,d5
- bsr alert
- bsr clos_file
- bra alrtx
- lo_a0: moveq #0,d0
- bsr lseek
- move.l #mouse_array,a5
- move.l #74*32,d5
- bsr read_file
- move.l #nframs,a5
- move.l #2,d5
- bsr read_file
- move.l #delval,a5
- bsr read_file
- bsr clos_file
- move.w #1,insflg
- move.w #1,onoff
- move #1,vbi_on ; Turn on the vertical blank interrupt
- bra arroff
-
- l_lo3: move.l #mouse_form,a5 ; Read in the mouse
- move.l #74,d5
- bsr read_file
- bmi alrtx
- bsr clos_file ; Close the file
-
- bsr cpy_inst ; Move it to 'installed' area
- bsr chg_mouse ; Go change the mouse
-
- bsr init_col ; Initialize the color counters
- move #1,insflg ; Set installed flag
- clr.w onoff
-
- move #1,vbi_on ; Turn on the vertical blank interrupt
- bra arr_on
-
- alrt0: cmp.w #losvbt,intout ; Save?
- bne alrt1
-
- move #NORMAL,losstt ; De-select the button
-
- tst onoff ; Animation on?
- beq.s al0_0
- move #losvbt,intin
- move.l #lowbox,addrin
- bsr objoff
- bra loinpt
-
- al0_0: bsr fsl_dsave ; Set up fsel text strings
- bsr fsel
-
- tst.b savfil ; Filename present?
- beq dolbox ; Nope, exit
- cmp.w #1,intout+2 ; OK button?
- bne dolbox ; No, must be 'Cancel'
-
- bsr set_path ; Set the pathname from fsel's output
- move.l #datext+3,a1
- bsr chk_extension ; Add the .DAT extension (if none exists)
-
- bsr sav_exist ; See if the file already exists
- bne.s locrea ; It doesn't, skip ahead
- bsr set_exist ; Move the filename to the alert box
- lo_sho: move.l #exist,a5 ; Show alert box
- move #1,d5
- bsr alert
- cmp.w #1,intout ; Overwrite the file?
- bne dolbox ; No, split
- move.l #savfil,a0
- bsr delete_file
-
- locrea: clr.w -(sp) ; Create the data file
- pea savfil
- move #$3C,-(sp)
- trap #1
- addq #8,sp
- tst.w d0
- bmi dolbox
- move d0,fhandl
-
- move.l #m_form2,-(sp) ; Write the mouse buffer to the file
- move.l #74,-(sp)
- move fhandl,-(sp)
- move #$40,-(sp)
- trap #1
- add #12,sp
-
- cmp.l #74,d0
- beq.s locr_1
- move.l #dskful,a5
- move #1,d5
- bsr alert
- move.l #savfil,a0
- bsr delete_file
-
- locr_1: bsr clos_file ; Close it
- bra dolbox
-
- alrt1: cmp.w #loremv,intout ; Remove?
- bne.s alrt2 ; No, skip
- clr vbi_on ; Remove the vertical blank interrupt
- move.l #g_mous,aespb ; And turn on the arrow
- clr.w intin
- bsr aes
- clr.w insflg
- clr.w onoff
- move #NORMAL,lorstt ; De-select the button
- bra alrtx
-
- alrt2: cmp.w #lodown,intout ; Color down button?
- bne.s alrt3 ; No, hop over this code
- tst insflg ; Installed?
- beq loinpt ; No, go back
- tst onoff
- bne loinpt
- tst.w colflg ; Which color are we changing?
- bne.s lcd_1 ; Must be the mask
- tst.w m_form2+8 ; Is this color zero already?
- beq loinpt ; Yes, exit
- subq.w #1,m_form2+8 ; Decrement the color register value
- move.l #dvalms,a5 ; Address of data color text
- bra.s lcd_2 ; Skip over
- lcd_1: tst.w m_form2+6 ; Is it zero?
- beq loinpt ; Yes, let's just forget about this
- subq.w #1,m_form2+6 ; Decrement it
- move.l #mvalms,a5 ; Address of mask color text
- lcd_2: move.l #1,d5 ; Two characters
- add.l d5,a5 ; Set pointer to 2nd character
- ldloop: cmp.b #'0',(a5) ; Is it ASCII zero?
- bne.s ldl2 ; No, skip ahead
- move.b #'9',(a5) ; Wrap it around to 9
- bra.s ldl3
- ldl2: subq.b #1,(a5) ; Decrement the letter
- bra.s lodrw1
- ldl3: subq #1,a5 ; Set pointer to next place
- dbf d5,ldloop ; Do the 2nd letter
- bra.s lodrw1 ; Go draw the text object
-
- alrt3: cmp.w #loup,intout ; Color up button?
- bne alrt4 ; No, get out!
- tst insflg ; Installed?
- beq loinpt
- tst onoff
- bne loinpt
- tst.w colflg ; The rest of this code is identical to
- bne.s lcu_1 ; the above section, except that it handles
- cmp.w #15,m_form2+8 ; incrementing the color value
- beq loinpt
- addq.w #1,m_form2+8
- move.l #dvalms,a5
- bra.s lcu_2
- lcu_1: cmp.w #15,m_form2+6
- beq loinpt
- addq.w #1,m_form2+6
- move.l #mvalms,a5
- lcu_2: move.l #1,d5
- add.l d5,a5
- luloop: cmp.b #'9',(a5)
- bne.s lul2
- move.b #'0',(a5)
- bra.s lul3
- lul2: addq.b #1,(a5)
- bra.s lodrw1
- lul3: subq #1,a5
- dbf d5,luloop
- lodrw1: bsr chg_mouse ; Go change the mouse's color
- lodraw: move #locval,intin ; Index of object to draw
- move.l #lowbox,addrin ; Address of object tree
- bsr objoff ; Go draw it
- bra loinpt
-
- alrt4: cmp.w #locolr,intout ; Data/Mask toggle?
- bne.s alrtx ; No, skip
- tst insflg
- beq loinpt
- tst onoff
- bne loinpt
- eor.w #1,colflg ; Toggle the flag
- tst.w colflg ; Which one is it?
- beq.s lsw_1 ; It's data, skip ahead
- move.l #mcolms,tinf10 ; Set pointers to text in object tree
- move.l #mvalms,lovadr
- bra.s lsw_2
- lsw_1: move.l #dcolms,tinf10
- move.l #dvalms,lovadr
- lsw_2: move #locolr,intin
- move.l #lowbox,addrin
- bsr objoff ; Go draw the object
- bra lodraw
-
- alrtx: bsr res_dpath ; Reset the drive and pathnames
-
- move #NORMAL,loestt
-
- move #3,intin
- bsr dial
-
- move.l #w_clos,aespb ; Close window so the application gets a
- move whandl,intin ; redraw message
- bsr aes
- move.l #w_del,aespb ; Now delete the window
- bsr aes
-
- alrtx1: move.l #w_updt,aespb ; Allow user actions again
- clr.w intin ; (Hah! Were they ever disabled???)
- bsr aes
-
- clr.w diflag
-
- bra evntms ; Wait patiently for another message
-
- * Subroutines for low-res dialog box (strange place for them, I know)
-
- chg_mouse:
- move.l #g_mous,aespb ; Change that mousey!
- move #255,intin
- move.l #m_form2,addrin
- bra aes
-
- fsl_dload:
- move.l #i_load,txtadr ; Set up the 'Load' fsel text strings
- move #il_len,itmlen
- move.l #loddir,diradr
- move.l #lodfil,filadr
- rts
-
- fsl_aload:
- move.l #i_aloa,txtadr
- move #iallen,itmlen
- move.l #loadir,diradr
- move.l #loafil,filadr
- rts
-
- fsl_dsave:
- move.l #i_save,txtadr ; The 'Save' fsel text strings
- move #is_len,itmlen
- move.l #savdir,diradr
- move.l #savfil,filadr
- rts
-
- fsl_asave:
- move.l #i_asav,txtadr
- move #iaslen,itmlen
- move.l #svadir,diradr
- move.l #svafil,filadr
- rts
-
- sav_exist:
- pea dta ; Set DTA address
- move #$1A,-(sp)
- trap #1
- addq #6,sp
- clr.w -(sp)
- move.l filadr,-(sp)
- move #$4E,-(sp) ; Check to see if the file already exists
- trap #1
- addq #8,sp
- tst d0 ; Does it?
- rts
-
- cpy_inst:
- move.l #mouse_form,a0 ; Copy mouse data to "installed" area
- move.l #m_form2,a1
- move #36,d5
- cpyi1: move (a0)+,(a1)+
- dbf d5,cpyi1
- rts
-
- set_exist:
- move.l #exname,a4 ; Clear filename space in alert box
- move #11,d5
- sete1: move.b #' ',(a4)+
- dbf d5,sete1
- move.l filadr,a5 ; Move filename into alert box
- move.l #exname,a4
- move #12,d5
- sete2: tst.b (a5)
- beq.s sete3
- move.b (a5)+,(a4)+
- dbf d5,sete2
- sete3: rts
-
-
- * Here's where the editor code begins
-
- continue:
- move.l #contrl,a5
- move #100,(a5) ; v_opnvwk (Open Virtual Workstation)
- clr.w 2(a5)
- move #11,6(a5)
- move ghandl,12(a5) ; Pass handle returned from graph_handle
- move.l #intin,a4
- move.l #9,d5
- vwrklp: move #1,(a4)+
- dbf d5,vwrklp
- move #2,(a4)
- bsr vdi1
-
- move 12(a5),vhandl ; Save VDI handle
-
- move #35,(a5) ; Inquire current polyline attributes
- clr.w 2(a5) ; vql_attributes
- clr.w 6(a5)
- bsr vdi
-
- move.l #intout,a0
- move (a0)+,l_type ; Save 'em
- move (a0)+,l_colr
- move (a0)+,d_mode
- move (a0)+,l_strt
- move (a0)+,l_end
- move ptsout,l_wid
-
- move #37,(a5) ; Inquire current fill attributes
- clr.w 2(a5) ; vqf_attributes
- clr.w 6(a5)
- bsr vdi
-
- move.l #intout,a0
- move (a0)+,f_type ; Save these attributes too
- move (a0)+,f_colr
- move (a0)+,f_patt
-
- bsr exch_button ; Set the button routine to an rts
-
- * move.l #intout,a5
- * move.l 2(a5),wx ; Dialog box centered coordinates
- * move.l 6(a5),ww
- * subq.w #2,wx ; Compensate for the shadow
- * subq.w #2,wy
- * addq.w #4,ww
- * addq.w #4,wh
-
- bsr open_window
-
- tst d0
- beq.s box
- move.l #w_updt,aespb
- clr.w intin
- bsr aes
- bra ex2
-
- box: move.l #editbx,addrin
- bsr drawbx ; Draw the dialog box
- move #1,diflag
-
- dc.w $A00A ; Hide mouse
-
- move #1,intin ; Replace
- bsr write_mode
-
- move #1,intin ; Black lines
- bsr poly_color
-
- move #1,intin ; Ordinary straight lines
- bsr poly_type
-
- move #1,ptsin ; One pixel wide
- clr.w ptsin+2
- bsr poly_width
-
- clr.l intin ; Normal, squared ends
- bsr poly_ends
-
- move #2,intin ; Set fill style to dots
- bsr vsf_interior
-
- move #16,d4 ; Loop counter
- move.l #ptsin,a4 ; Keep address of ptsin array in a4
- move #2,pt_num ; Just two points
-
- grid1: move #50,(a4) ; Draw the editing grids
- move d4,d0
- mulu y_div,d0
- add.w y_off,d0
- move d0,2(a4)
- move #210,4(a4)
- move d4,d0
- mulu y_div,d0
- add.w y_off,d0
- move d0,6(a4)
- bsr polyline
-
- move #250,(a4)
- move d4,d0
- mulu y_div,d0
- add.w y_off,d0
- move d0,2(a4)
- move #410,4(a4)
- move d4,d0
- mulu y_div,d0
- add.w y_off,d0
- move d0,6(a4)
- bsr polyline
-
- move d4,d0
- mulu #10,d0
- add.w #50,d0
- move d0,(a4)
- move y_off,2(a4)
- move d4,d0
- mulu #10,d0
- add.w #50,d0
- move d0,4(a4)
- move y_bot,6(a4)
- bsr polyline
-
- move d4,d0
- mulu #10,d0
- add.w #250,d0
- move d0,(a4)
- move y_off,2(a4)
- move d4,d0
- mulu #10,d0
- add.w #250,d0
- move d0,4(a4)
- move y_bot,6(a4)
- bsr polyline
-
- dbf d4,grid1
-
- move #434,(a4) ; Draw the mouse-change rectangle
- move y_off,2(a4)
- move #516,4(a4)
- move y_off,6(a4)
- move #516,8(a4)
- move chang1,10(a4)
- move #434,12(a4)
- move chang1,14(a4)
- move #434,16(a4)
- move y_off,18(a4)
- move #5,pt_num
- bsr polyline
-
- move #1,intin
- bsr vsf_color
- move #8,intin
- bsr vsf_style
-
- move.l #contrl,a5
- move #114,(a5)
- move #2,2(a5)
- clr.w 6(a5)
- move #434,ptsin ; Fill the top half of the mouse-change
- move y_off,ptsin+2 ; rectangle
- move #516,ptsin+4
- move chang2,ptsin+6
- bsr vdi
-
- bsr show_mouse ; Oh, there's that little mousey!
-
- clr.w m_flag ; Clear mouse-change flag
- bsr map_grid ; Go map the shape
- clr.w d_flag ; Clear the drawing flag
-
- the_big_loop:
- bsr sample_mouse ; Let's see what's happening
-
- move.b intout+1,butsav ; Save button status
- move.l ptsout,mousex ; and X and Y coordinates
-
- move.l #o_cfnd,aespb ; objc_find --- get the index number of the
- move.l #intin,a0 ; object under the mouse cursor
- move.l #$00000005,(a0)+
- move.l mousex,(a0)+
- move.l #editbx,addrin
- bsr aes
-
- move intout,d5
- move.l #ob_inx,a0
- sub.w d0,d0
- ck_obs: cmp.w (a0)+,d5 ; Compare it with the active object list
- beq.s gotobj ; Got one!
- addq.w #1,d0 ; Increment counter
- cmp.w #oi_len,d0 ; Done?
- bne ck_obs ; No, do the rest
- bra ckchng ; If we get here, we're not over an active object
-
- gotobj: move d0,numrtn ; Save index into routines
- move d5,o_indx ; Save object index
- move.l #o_coff,aespb ; Get coordinates of object we're over
- move d5,intin
- move.l #editbx,addrin
- bsr aes
- move.l intout+2,x_obj1 ; Save X and Y coordinates
- move intout+2,d0
- move intout+4,d1
- moveq #0,d4
- move o_indx,d4
- mulu #24,d4
- add.l #editbx,d4
- move.l d4,a0 ; a0 -> address of object in tree
-
- move.l d4,o_asav
- add.w 20(a0),d0 ; Compute diagonal opposite point of the box
- add.w 22(a0),d1 ; by adding the width and height to the
- move d0,x_obj2 ; X and Y
- move d1,y_obj2
- move.l 20(a0),w_obj ; Save width and height
-
- move #0,butflg ; Clear button flag
-
- ob_loop:
- bsr sample_mouse ; Where am I? (said the amnesia victim)
- move ptsout,d0 ; Get current X coordinate
- cmp.w x_obj1,d0 ; Check to see if we're still over the
- blt ortn_exit ; same object; if not, exit
- cmp.w x_obj2,d0
- bgt ortn_exit
- move ptsout+2,d0
- cmp.w y_obj1,d0
- blt ortn_exit
- cmp.w y_obj2,d0
- bgt ortn_exit
-
- btst #0,intout+1 ; Pressing the left button?
- bne.s ol1_2 ; Yes, go ahead
- btst #1,intout+1 ; Right button?
- beq ob_loop ; No, go back
-
- ol1_2: move #1,butflg ; Yes, set the button flag
-
- move.w o_indx,d0
- cmp.w #cdowbt,d0
- beq.s oloop2
- cmp.w #cupbt,d0
- beq.s oloop2
- cmp.w #colttl,d0
- beq.s oloop2
- cmp.w #frmttl,d0
- beq.s oloop2
- cmp.w #frdown,d0
- beq.s oloop2
- cmp.w #frup,d0
- beq.s oloop2
- cmp.w #anonof,d0
- beq.s oloop2
- move.l o_asav,a0 ; Address of object in tree
- or.w #SELECTED,10(a0) ; Turn it on, dead man
- bsr obdraw ; And draw it
-
- oloop2: bsr sample_mouse ; Where am I now?
-
- move.w o_indx,d0
- cmp.w #frdown,d0
- beq.s ol2_2
- cmp.w #frup,d0
- beq.s ol2_2
-
- btst #0,intout+1 ; Still pressing the button?
- bne oloop2 ; Yes, loop
- btst #1,intout+1
- bne oloop2
- ol2_2: move ptsout,d0 ; OK, we let go of the button. Now let's
- cmp.w x_obj1,d0 ; check to see whether we're still over
- blt.s go_oex ; the same object; if not, exit
- cmp.w x_obj2,d0
- bgt.s go_oex
- move ptsout+2,d0
- cmp.w y_obj1,d0
- blt.s go_oex
- cmp.w y_obj2,d0
- ble.s oloop3
- go_oex: move #-1,numrtn
- bra ortn_exit
-
- oloop3: moveq #0,d0
- move numrtn,d0 ; Get index into address table
- lsl.w #2,d0 ; Multiply by 4 (to adjust for longwords)
- add.l #rtn_table,d0 ; Add start of table
- move.l d0,a5 ; Move it to a place where it can do some good
- move.l (a5),a5 ; Get routine address into a5
- jmp (a5) ; And jump to it!
-
- * Object-related routines
-
- save:
- clr.w adflag
- bsr repl_button
- move.l #dat_or_ani,a5 ; Show alert box
- clr d5
- bsr alert
- bsr exch_button
- cmp.w #1,intout ; Animation file?
- bne.s sv1
- move #1,adflag ; Set flag
- bsr fsl_asave
- bra.s sv2
-
- sv1: bsr fsl_dsave ; Set fsel parameters
- sv2: bsr repl_button ; Restore the button vector
- bsr fsel ; Call the dreaded File Selector
- bsr exch_button ; Point button vector to an RTS again
-
- move.l filadr,a0
- tst.b (a0) ; Got a filename?
- beq ortn_exit
- cmp.w #1,intout+2 ; OK button?
- bne ortn_exit
-
- bsr set_path ; Set pathname
- tst adflag
- beq.s sv3
- move.l #aniext+3,a1
- bra.s sv4
- sv3: move.l #datext+3,a1
- sv4: bsr chk_extension ; Check for extension
-
- bsr sav_exist ; Does the file already exist?
- bne.s create ; No, continue
-
- bsr set_exist ; Copy the name into the alert box
-
- sho_al: bsr repl_button ; Replace the system button routine vector
-
- move.l #exist,a5 ; Show alert box
- move #1,d5
- bsr alert
-
- bsr exch_button ; Turn off the button routine again
-
- cmp.w #1,intout ; Yes button?
- bne sav_x ; No, exit
-
- move.l filadr,a0
- bsr delete_file
-
- create: clr.w -(sp) ; Create the data file
- move.l filadr,-(sp)
- move #$3C,-(sp)
- trap #1
- addq #8,sp
- tst.w d0
- bmi sav_x
- move d0,fhandl
-
- tst adflag
- beq.s sv5
- move.l #mouse_array,-(sp)
- move.l #74*32,d5
- bra.s sv6
- sv5: move.l #mouse_form,-(sp) ; Write the mouse data to the file
- move.l #74,d5
- sv6: move.l d5,-(sp)
- move fhandl,-(sp)
- move #$40,-(sp)
- trap #1
- add #12,sp
-
- cmp.l d5,d0
- beq.s sv7
- full: bsr repl_button
- move.l #dskful,a5
- move #1,d5
- bsr alert
- bsr exch_button
- move.l filadr,a0
- bsr delete_file
- bra.s sv8
-
- sv7: tst adflag ; Data or animation?
- beq.s sv8 ; Data, skip
- move.l #nframs,-(sp) ; Save number of frames and delay value
- move.l #2,-(sp)
- move fhandl,-(sp)
- move #$40,-(sp)
- trap #1
- add #12,sp
- cmp.l #2,d0
- bne full
-
- move.l #delval,-(sp)
- move.l #2,-(sp)
- move fhandl,-(sp)
- move #$40,-(sp)
- trap #1
- add #12,sp
- cmp.l #2,d0
- bne full
-
- sv8: bsr clos_file ; Close it nice and tight
- sav_x: bra ortn_exit
-
- load:
- clr.w adflag
- bsr repl_button
- move.l #dat_or_ani,a5 ; Show alert box
- clr d5
- bsr alert
- bsr exch_button
- cmp.w #1,intout ; Animation file?
- bne.s lo1
- move #1,adflag
- bsr fsl_aload
- bra.s lo2
-
- lo1: bsr fsl_dload ; Same old fsel stuff as everywhere else
- lo2: bsr repl_button
- bsr fsel
- bsr exch_button
-
- move.l filadr,a0
- tst.b (a0) ; Filename?
- beq ortn_exit
- cmp.w #1,intout+2 ; OK button?
- bne ortn_exit
-
- bsr set_path
-
- move.l filadr,a5
- bsr open_file
- bmi lod_x2
- move d0,fhandl
-
- tst adflag
- beq.s lo3
-
- bsr chk_anfile
- tst.w a_good
- beq.s lo2_2
-
- lo2_1: bsr repl_button
- move.l #notani,a5
- move #1,d5
- bsr alert
- bsr exch_button
- bra.s lod_x
-
- lo2_2: moveq #0,d0
- bsr.s lseek
- move.l #mouse_array,a5
- move.l #74*32,d5
- bsr read_file
- bmi.s lod_x
- move.l #nframs,a5
- move.l #2,d5
- bsr read_file
- move.l #delval,a5
- bsr read_file
- bsr clos_file
- clr.w franum
- move.b #'0',frvlms
- move.b #'1',frvlms+1
- bsr arr_2_frm
- bsr init_nfrm
- bra.s lo4
-
- lo3: move.l #mouse_form,a5 ; Read in the mouse data
- move.l #74,d5
- bsr read_file
- bmi.s lod_x
-
- lo4: bsr copy_mouse ; Copy to undo buffer
- bsr init_col ; Initialize color indicators
-
- lod_x: bsr clos_file
- lod_x2: bra ortn_exit
-
- lseek: move #0,-(sp)
- move.w fhandl,-(sp)
- move.l d0,-(sp)
- move.w #$42,-(sp)
- trap #1
- add #10,sp
- tst.l d0
- rts
-
- clr_mask:
- bsr copy_mouse ; Save in undo buffer
- move.l #m_mask,a5 ; Address of mask
- bra.s clr2
-
- clr_data:
- bsr copy_mouse ; Save mouse
- move.l #m_image,a5 ; Address of data
- clr2: move #7,d5 ; 8 longwords (16 words)
- clrd1: clr.l (a5)+ ; Clear that mouse!
- dbf d5,clrd1
- bsr map_grid ; Draw it on the grid
- bra ortn_exit
-
- inv_data:
- bsr copy_mouse
- move.l #m_image,a5
- bra.s inv2
-
- inv_mask:
- bsr copy_mouse
- move.l #m_mask,a5
- inv2: move #15,d5 ; 16 words
- invm1: eor.w #$FFFF,(a5)+ ; Invert every bit in each word
- dbf d5,invm1
- bsr map_grid ; Draw it on the grid
- bra ortn_exit
-
- mir_data:
- bsr copy_mouse
- move.l #m_image,a5
- bra.s mir2
-
- mir_mask:
- bsr copy_mouse
- move.l #m_mask,a5
- mir2: move #15,d5 ; 16 words of mouse data
- mir3: move #15,d4 ; 16 bits in each word
- clr.w d1 ; Clear work register
- move (a5),d0 ; Get the word
- mirm1: lsl d0 ; Shift a bit left
- roxr d1 ; Roll it right into the work register
- dbf d4,mirm1 ; Do all 16 bits
- move d1,(a5)+ ; Put it back
- dbf d5,mir3 ; Do all 16 words
- bsr map_grid ; Draw the grid
- bra ortn_exit
-
- rotate:
- bsr copy_mouse ; Save in undo buffer
- move.l #m_rotate,a5 ; Address of rotation buffer
- move #15,d5
- r_clr: clr.l (a5)+ ; First, clear out the rotation buffer
- dbf d5,r_clr
- move.l #m_mask+30,a4 ; Start at end of data
- move.l #m_rotate,a5
- r_lp1: move #15,d4 ; 16 words
- wordlp: move (a4),d2 ; Get a word
- move #15,d5 ; 16 bits per word
- bitloo: move d5,d3 ; Get bit number
- lsl d3 ; Multiply by 2 (for word offset)
- move 0(a5,d3),d1 ; Get word from rotation buffer
- lsr d2 ; Shift a bit right
- roxl d1 ; Roll it left into d1
- move d1,0(a5,d3) ; Put this new word back
- dbf d5,bitloo ; Do all 16 bits
- subq.w #2,a4 ; Point to next data word
- dbf d4,wordlp ; Do all 16 words
- cmp.l #m_mask-2,a4 ; We're rotating both mask and data together
- bne.s r_cpy1 ; All done, skip ahead
- move.l #m_mask+62,a4 ; Set address of mask
- move.l #m_rotate+32,a5
- bra r_lp1 ; Go finish the job
-
- r_cpy1: move.l #m_mask,a4
- move.l #m_rotate,a5
- move #15,d5
- r_cpy: move.l (a5)+,(a4)+ ; Move the mouse data from the rotation buffer
- dbf d5,r_cpy
- bsr map_grid ; Draw the grid
- bra ortn_exit
-
- up:
- bsr copy_mouse ; Scroll mouse image up
- move.l #m_image,a5 ; First, the data
- move (a5),temp ; Save top word
- move #14,d5
- up1: move 2(a5),(a5)+ ; Move 'em up
- dbf d5,up1
- move temp,(a5) ; Put the top line in at the bottom
- move.l #m_mask,a5 ; Now do the mask
- move (a5),temp
- move #14,d5
- up2: move 2(a5),(a5)+ ; Get on up!
- dbf d5,up2
- move temp,(a5)
- bsr map_grid ; Draw the grid
- bra ortn_exit
-
- left:
- bsr copy_mouse ; Scroll mouse form left
- move.l #m_mask,a5
- move #31,d5
- left1: lsl (a5)+ ; Shift a bit left
- bcc.s left2 ; This bit wasn't set, skip ahead
- or.w #1,-2(a5) ; Set rightmost bit
- left2: dbf d5,left1
- bsr map_grid
- bra ortn_exit
-
- down:
- bsr copy_mouse ; Scroll mouse shape down
- move.l #m_image+30,a5 ; First, the data
- move (a5),temp ; Save bottom word
- move #14,d5
- down1: move -2(a5),(a5) ; Get down!
- subq #2,a5
- dbf d5,down1
- move temp,(a5) ; Put bottom word at the top
- move.l #m_mask+30,a5 ; Now do the same for the mask
- move (a5),temp
- move #14,d5
- down2: move -2(a5),(a5)
- subq #2,a5
- dbf d5,down2
- move temp,(a5)
- bsr map_grid
- bra ortn_exit
-
- right:
- bsr copy_mouse ; Scroll mouse image right
- move.l #m_mask,a5
- move #31,d5
- right1: lsr (a5)+ ; Shift a bit
- bcc.s right2 ; It wasn't set, skip
- or.w #$8000,-2(a5) ; Set leftmost bit in this word
- right2: dbf d5,right1
- bsr map_grid
- bra ortn_exit
-
- install:
- move.l #m_mask,a5 ; Don't let 'em install a blank mouse!
- move #15,d5
- ck_i1: tst.l (a5)+
- bne.s inst1
- dbf d5,ck_i1
- bra.s instx
- inst1: bsr cpy_inst ; Copy mouse to 'Installed' area
- move.l #g_mous,aespb ; AES graf_mouse call to set the new image
- move #255,intin
- move.l #m_form2,addrin
- bsr aes
- move #1,insflg ; Set installed flag
- move #1,vbi_on ; Turn on the vertical blank interrupt
- instx: bra ortn_exit
-
- remove:
- clr.w insflg ; Clear installed flag
- clr.w vbi_on ; Remove vertical blank routine
-
- move.l #g_mous,aespb ; Set the arrow cursor
- clr.w intin
- bsr aes
- bra ortn_exit
-
- undo:
- bsr res_mouse ; Restore mouse data from the undo buffer
- bsr map_grid ; Draw it on the grid
- bra ortn_exit
-
- colr_down:
- tst.w colflg ; Which color? Data or mask?
- bne.s cd_1 ; Must be the mask color, skip ahead
- tst.w bg_col ; Is it zero already?
- beq ortn_exit ; Yes, bail
- subq.w #1,bg_col ; Decrement it
- move.l #dvalms,a5 ; Address of color value text
- bra.s cd_2 ; Skip
- cd_1: tst.w fg_col ; Zero already?
- beq ortn_exit ; Yes, forget it
- subq.w #1,fg_col ; Decrement it
- move.l #mvalms,a5 ; Address of color value text
- cd_2: move.l #1,d5 ; Two digits
- add.l d5,a5 ; Set pointer 2nd digit (ones place)
- dnloop: cmp.b #'0',(a5) ; Is it ASCII zero?
- bne.s dnl2 ; No, skip ahead
- move.b #'9',(a5) ; Put a '9' here
- bra.s dnl3
- dnl2: subq.b #1,(a5) ; Decrement the ASCII number
- bra.s valdrw ; Go draw it
- dnl3: subq #1,a5 ; Move pointer to tens digit
- dbf d5,dnloop
- bra.s valdrw
-
- colr_up:
- tst.w colflg ; This code does the same thing as the section
- bne.s cu_1 ; above, but for color-up adjustments
- cmp.w #15,bg_col
- beq ortn_exit
- addq.w #1,bg_col
- move.l #dvalms,a5
- bra.s cu_2
- cu_1: cmp.w #15,fg_col
- beq ortn_exit
- addq.w #1,fg_col
- move.l #mvalms,a5
- cu_2: move.l #1,d5
- add.l d5,a5
- uploop: cmp.b #'9',(a5)
- bne.s upl2
- move.b #'0',(a5)
- bra.s upl3
- upl2: addq.b #1,(a5)
- bra.s valdrw
- upl3: subq #1,a5
- dbf d5,uploop
- valdrw: move #colval,intin ; Object index of the color value text
- move.l #editbx,addrin ; Address of object tree
- bsr objoff ; Go draw this text object
- bra ortn_exit
-
- sw_fgbg:
- eor.w #1,colflg ; Toggle color flag
- tst.w colflg ; Which color, mask or data?
- beq.s sw_1 ; 0=data, 1=mask
- move.l #mcolms,tinf3 ; Set pointers to text strings
- move.l #mvalms,valadr
- bra.s sw_2
- sw_1: move.l #dcolms,tinf3
- move.l #dvalms,valadr
- sw_2: move #colttl,intin ; And go draw the object
- move.l #editbx,addrin
- bsr objoff
- bra valdrw
-
- sw_anttl:
- addq.w #1,antflg ; Increment flag
- move.w antflg,d0
- cmp.w #3,d0 ; Greater than 2?
- bne.s swa_1
- sub.w d0,d0 ; Back to zero
- move.w d0,antflg
- swa_1: tst d0 ; 0=Frame, 1=# of Frames, 2=Speed
- bne.s swa_2
- move.l #framms,tinf4
- move.l #frvlms,anival
- bra.s swa_4
- swa_2: cmp.w #1,d0
- bne.s swa_3
- move.l #frmnms,tinf4
- move.l #fnvlms,anival
- bra.s swa_4
- swa_3: move.l #speems,tinf4
- move.l #spvlms,anival
- swa_4: move.w #frmttl,intin
- move.l #editbx,addrin
- bsr objoff
- move.w #frmval,intin
- move.l #editbx,addrin
- bsr objoff
- bra ortn_exit
-
- ani_down:
- tst antflg ; Are we changing the frame?
- bne.s anid_2 ; No, skip ahead
- bsr chk_shift
- bsr frm_2_arr ; Copy current frame to sequence array
- tst franum ; Is it zero already?
- bne.s d_fnum
- move.b #'3',frvlms
- move.b #'2',frvlms+1
- move.w #31,franum
- bra fvaldr
- d_fnum: subq.w #1,franum
- move.l #frvlms,a5
- bra.s ad_1
- anid_2: cmp.w #1,antflg ; Changing # of Frames?
- bne.s anid_3
- cmp.w #1,nframs
- bne.s d_nfrm
- move.b #'3',fnvlms
- move.b #'2',fnvlms+1
- move.w #32,nframs
- bra.s fvaldr
- d_nfrm: subq.w #1,nframs
- move.l #fnvlms,a5
- bra.s ad_1
- anid_3: tst delval ; Must be changing the delay value
- bne.s d_delv
- move.b #'9',spvlms
- move.b #'9',spvlms+1
- move.w #99,delval
- bra.s fvaldr
- d_delv: subq.w #1,delval
- move.l #spvlms,a5
- ad_1: move.l #1,d5
- add.l d5,a5
- adloop: cmp.b #'0',(a5) ; Is it ASCII zero?
- bne.s adl2
- move.b #'9',(a5)
- bra.s adl3
- adl2: subq.b #1,(a5) ; Decrement the ASCII number
- bra.s fvaldr
- adl3: subq #1,a5 ; Move pointer to tens digit
- dbf d5,adloop
- fvaldr: move.w #frmval,intin
- move.l #editbx,addrin
- bsr objoff
- tst antflg ; Changing current frame?
- beq.s fvald1 ; Yes, skip
- move #7,d5
- waitnd: move.w #37,-(sp) ; Wait 6 vertical blanks
- trap #14 ; (in case button is being held)
- addq #2,sp
- dbf d5,waitnd
- bra ortn_exit
- fvald1: tst shfflg ; Were we holding shift (copying)?
- beq.s fvald2 ; No, skip
- bsr frm_2_arr ; Copy mouse form to new array position
- fvald2: bsr arr_2_frm ; Copy it back (dumb)
- bsr init_col
- move.w #colval,intin
- move.l #editbx,addrin
- bsr objoff
- bsr map_grid
- fvex: bra ortn_exit
-
- ani_up:
- tst antflg
- bne.s aniu_2
- bsr chk_shift
- bsr frm_2_arr
- cmp.w #31,franum
- bne.s i_fnum
- move.b #'0',frvlms
- move.b #'1',frvlms+1
- clr.w franum
- bra fvaldr
- i_fnum: addq.w #1,franum
- move.l #frvlms,a5
- bra.s au_1
- aniu_2: cmp.w #1,antflg
- bne.s aniu_3
- cmp.w #32,nframs
- bne.s i_nfrm
- move.b #'0',fnvlms
- move.b #'1',fnvlms+1
- move.w #1,nframs
- bra fvaldr
- i_nfrm: addq.w #1,nframs
- move.l #fnvlms,a5
- bra.s au_1
- aniu_3: cmp.w #99,delval
- bne.s i_delv
- move.b #'0',spvlms
- move.b #'0',spvlms+1
- clr.w delval
- bra fvaldr
- i_delv: addq.w #1,delval
- move.l #spvlms,a5
- au_1: move.l #1,d5
- add.l d5,a5
- auloop: cmp.b #'9',(a5)
- bne.s aul2
- move.b #'0',(a5)
- bra.s aul3
- aul2: addq.b #1,(a5)
- bra fvaldr
- aul3: subq #1,a5
- dbf d5,auloop
- bra fvaldr
-
- * Subroutines for ani_up and ani_down
-
- chk_shift:
- clr.w shfflg
- move.w #-1,-(sp) ; Get Alt/Shift/Control status
- move.w #11,-(sp)
- trap #13
- addq #4,sp
- btst #0,d0 ; Right shift key?
- bne.s shift1
- btst #1,d0 ; Left shift key?
- beq.s shift2
- shift1: move #1,shfflg
- shift2: rts
-
- frm_2_arr:
- bsr.s set_faadr
- cpyfr1: move.l (a1)+,(a0)+
- dbf d0,cpyfr1
- move.w (a1),(a0) ; Move last word to make it 74
- rts
-
- arr_2_frm:
- bsr.s set_faadr
- cpyar1: move.l (a0)+,(a1)+
- dbf d0,cpyar1
- move.w (a0),(a1)
- bra copy_mouse
-
- set_faadr:
- move.l #mouse_array,a0 ; Address of animation array
- moveq #0,d0 ; Clear work register
- move.w franum,d0 ; Get current frame number
- mulu #74,d0 ; Multiply by 74 (74 bytes per mouse)
- add.l d0,a0 ; Add index to pointer
- move.w #17,d0
- move.l #mouse_form,a1
- rts
-
- clear_array:
- move.l #mouse_array,a0
- move #591,d0
- cla_1: clr.l (a0)+
- dbf d0,cla_1
- rts
-
- ani_onoff:
- tst onoff ; Is animation on or off?
- bne.s anio_2 ; It's on, skip ahead
- bsr frm_2_arr ; Copy current frame to animation buffer
- move.l #anonms,tinf5 ; Set "Animation ON" message
- move.w delval,vbtimr ; Set the vertical blank timer
- clr.w moucnt ; Clear the frame counter
- move #1,onoff ; Now set the animation flag
- bra.s anio_3
- anio_2: move.l #anofms,tinf5 ; Set "Animation OFF" message
- clr.w moucnt ; Clear the frame counter
- clr.w onoff ; Clear the animation flag
- tst insflg ; Are we installed?
- beq.s anio_3 ; No, skip ahead
- move.l #g_mous,aespb ; Set mouse form back to installed shape
- move #255,intin
- move.l #m_form2,addrin
- bsr aes
-
- anio_3: move.w #anonof,intin ; Re-draw the ON/OFF message box
- move.l #editbx,addrin
- bsr objoff
- * bra.s ortn_exit
-
- * All object routines exit through here
-
- ortn_exit:
- tst.w butflg
- beq the_big_loop
-
- move.w o_indx,d0
- cmp.w #cdowbt,d0 ; If it was 'down', 'up', or color selection,
- beq the_big_loop ; loop back right away
- cmp.w #cupbt,d0
- beq the_big_loop
- cmp.w #colttl,d0
- beq the_big_loop
- cmp.w #frmttl,d0
- beq the_big_loop
- cmp.w #frdown,d0
- beq the_big_loop
- cmp.w #frup,d0
- beq the_big_loop
- cmp.w #anonof,d0
- beq the_big_loop
-
- move.l o_asav,a0 ; Get address of object that was selected
- and.w #$FFFE,10(a0) ; De-select it
- tst.w numrtn ; If it was 'Save' or 'Load', go back to
- beq box ; the dialog box drawing code
- cmp.w #1,numrtn
- beq box
- bsr obdraw ; Go re-draw the object
- bra the_big_loop ; Back to the top of the loop
-
- ckchng: cmp.w #434,mousex ; Check to see if we're inside the
- blt.s ckbutt ; mouse-change rectangle
- cmp.w #515,mousex
- bgt.s ckbutt
- move mousey,d0
- cmp.w y_off,d0
- blt.s ckbutt
- cmp.w chang1,d0
- bgt.s ckbutt
- tst.w m_flag ; Were we already in here?
- bne the_big_loop ; Yes! Go back
- move.l #m_mask,a0
- move #15,d0
- ck_img: tst.l (a0)+ ; If the mouse data is all zeros, don't
- bne.s setmou ; change it
- dbf d0,ck_img
- bra the_big_loop
- setmou: clr.w vbi_on ; Turn off the interrupt while we're here
- move #1,m_flag ; Set the flag
- move.l #g_mous,aespb ; Change the mouse form
- move #255,intin
- move.l #mouse_form,addrin
- bsr aes
- bra the_big_loop
-
- ckbutt: tst.w m_flag ; Just leaving the mouse-change rectangle?
- beq.s ckb2 ; No, skip
- move.l #g_mous,aespb
- move #255,intin
- tst.w insflg ; Mouse form installed?
- bne.s ckbu1 ; Yes, skip
- clr.w intin
- bra.s arr2
- ckbu1: move #1,vbi_on
- tst onoff
- beq.s ckbu2
- bsr which_mouse
- move.l a3,addrin
- bra.s arr2
- ckbu2: move.l #m_form2,addrin
- arr2: bsr aes
- clr.w m_flag
-
- ckb2: btst #0,butsav ; Left button pressed?
- bne.s ckpos ; Yes, go check position
- btst #1,butsav ; Right button?
- bne.s ckpos
- tst.w d_flag ; Were we just drawing?
- beq the_big_loop ; No, forget it
- clr.w d_flag ; Clear the flag
- bra the_big_loop
-
- ckpos: tst.w d_flag ; OK, we're drawing - is the draw flag set?
- bne.s ckp1 ; Yes, so skip ahead
- bsr copy_mouse ; Copy mouse shape to undo buffer
- move #1,d_flag ; Set draw flag
- ckp1: move mousey,d0 ; Get Y position
- cmp.w y_off,d0 ; Is mouse Y >= 100/50?
- blt the_big_loop
- cmp.w y_bot,d0 ; Is it < 260/130?
- bge the_big_loop
-
- bsr inquire ; Go see which grid is being drawn on
- bra the_big_loop ; And back to the top
-
- exit: move d_mode,intin ; Reset all the polyline and fill
- bsr write_mode ; attributes
- move l_colr,intin
- bsr poly_color
- move l_type,intin
- bsr poly_type
- move l_wid,ptsin
- clr.w ptsin+2
- bsr poly_width
- move l_strt,intin
- move l_end,intin+2
- bsr poly_ends
- move f_type,intin
- bsr vsf_interior
- move f_colr,intin
- bsr vsf_color
- move f_patt,intin
- bsr vsf_style
-
- move #3,intin ; Release dialog box memory
- bsr dial
-
- move.l #w_clos,aespb ; Close window so the application gets a
- move whandl,intin ; redraw message
- bsr aes
- move.l #w_del,aespb ; Now delete the window
- bsr aes
-
- move.l #w_updt,aespb ; Allow messages again
- clr.w intin
- bsr aes
-
- ex2: bsr repl_button ; Replace the system button vector
-
- move #101,(a5) ; v_clsvwk (Close Virtual Workstation)
- clr.w 2(a5)
- clr.w 6(a5)
- bsr vdi
-
- bsr res_dpath ; Reset drive and pathname
-
- and.w #$FFFE,extstt ; Reset EXIT button
-
- clr diflag
-
- bra evntms ; Go back and wait for another message!
-
-
- * Subroutines
-
- inquire:
- move #0,hotflg ; Clear hotspot flag
-
- cmp.w #50,mousex ; Are we inside the data grid?
- blt inq_return ; No, exit
- cmp.w #209,mousex
- bge inq_2 ; Go check to see if we're over the mask grid
-
- moveq #0,d0 ; Clear work register
- move mousex,d0 ; Get mouse X position
- sub.w #50,d0 ; The data grid starts 50 pixels from the left
- divu #10,d0 ; Divide by 10 to get cell X
- bvc.s storx ; No overflow, skip
- sub.w d0,d0 ; Set it to zero
- storx: move d0,x ; Set X array index
- moveq #0,d0 ; Clear register
- move mousey,d0 ; Get mouse Y position
- sub.w y_off,d0 ; Subtract res-dependent offset value
- divu y_div,d0 ; Divide by res-dependent Y divisor
- bvc.s story ; No overflow, skip
- sub.w d0,d0 ; Clear it
- story: move d0,y ; Set Y array index
-
- btst #0,butsav ; Was the left button pressed?
- beq.s eras_1 ; No, go to the erase routine
- btst #1,butsav ; Right button?
- beq.s inq1_1 ; No, skip
- do_hot: bsr sample_mouse ; Read mouse status
- btst #0,intout+1 ; Still pressing the left button?
- bne do_hot ; Yes, loop
- btst #1,intout+1 ; Still pressing right?
- bne do_hot ; Yes, loop
- move.l x,temp ; Save current x index
- move.l x_hot,x ; Set x index to hotspot position
- move #1,hotflg ; Set hotspot flag
- dc.w $A00A ; Hide the mouse
- bsr draw_pixel ; Go draw the hotspot
- bsr show_mouse ; Show the mouse
- move.l temp,x_hot ; Replace x position
- bsr set_hotspot
- rts
-
- inq1_1: move.w #-1,-(sp)
- move.w #11,-(sp)
- trap #13
- addq #4,sp
- btst #2,d0 ; Control key pressed?
- bne do_hot ; Yes, do the hot spot
- bsr get_iptr ; Get pointer to element of data array
- bne.s inq_return ; Return if not zero
- bset d0,d1 ; Set this bit
- move d1,(a0) ; And store it into the mouse shape area
- bra.s godraw
-
- eras_1: btst #1,butsav ; Right button?
- beq.s godraw ; No, skip
-
- bsr get_iptr ; Get pointer to data element
- beq.s inq_return ; Zero, exit
- bclr d0,d1 ; Clear this bit
- move d1,(a0) ; And store the word
-
- godraw: dc.w $A00A ; Hide the mouse
- bsr draw_pixel ; Go draw the pixel on the data grid
- bsr show_mouse ; Show the mouse again
- inq_return:
- rts
-
- inq_2:
- cmp.w #250,mousex ; Are we inside the mask grid?
- blt inq_return
- cmp.w #409,mousex
- bge inq_return
-
- moveq #0,d0 ; Clear the work register
- move mousex,d0 ; Get X position
- sub.w #250,d0 ; Mask grid starts 250 pixels from the left
- divu #10,d0 ; Each cell is 10 pixels wide
- bvc.s storx2 ; No overflow, skip
- sub.w d0,d0 ; Clear it
- storx2: move d0,x ; Save X index to array
- moveq #0,d0 ; Clear register
- move mousey,d0 ; Get Y position
- sub.w y_off,d0 ; Subtract res-dependent offset value
- divu y_div,d0 ; Divide by res-dependent Y divisor
- bvc.s story2 ; No overflow, skip
- sub.w d0,d0 ; Clear y index
- story2: move d0,y ; Save Y array index
-
- btst #0,butsav ; Left button?
- beq.s eras_2 ; No, go erase
-
- bsr get_mptr ; Get pointer to mask bit
- bne inq_return ; Already set, exit
- bset d0,d1 ; Set this bit in the mouse mask
- move d1,(a0) ; And save it
- bra godraw
-
- eras_2: btst #1,butsav ; Right button?
- beq godraw ; No, bail
-
- bsr get_mptr ; Find the bit and clear it
- beq inq_return ; (if it isn't already zero)
- bclr d0,d1
- move d1,(a0)
- bra godraw
-
- map_grid:
- dc.w $A00A ; Hide mouse
- move #1,hotflg ; Set hotspot flag
- move #15,d5 ; Draw both grids
- map1: move #15,d4
- map2: move d5,x
- move d4,y
- bsr.s draw_pixel
- dbf d4,map2
- dbf d5,map1
- bsr set_hotspot ; Draw the hotspot
- bsr show_mouse ; Show the mouse again
- rts
-
- copy_mouse:
- move.l x_hot,hotsav ; Copy the mouse shape to the undo buffer
- move.l #m_mask,a0
- move.l #mouse_save,a1
- move #15,d0
- cpym2: move.l (a0)+,(a1)+
- dbf d0,cpym2
- rts
-
- res_mouse:
- move.l hotsav,x_hot ; Restore the mouse shape from the undo buffer
- move.l #m_mask,a0
- move.l #mouse_save,a1
- move #15,d0
- resm2: move.l (a1)+,(a0)+
- dbf d0,resm2
- rts
-
- draw_pixel:
- bsr get_iptr ; Is this data bit set?
- bne.s solid ; Yes, skip ahead
-
- bsr get_mptr ; Is this mask bit set?
- bne.s blank2 ; Yes, skip ahead
-
- move.l #empty,filptr
- bsr.s d_int1 ; Draw the data cell
- bsr d_int2 ; Draw the mask cell
-
- bra.s draw_exit
-
- blank2: move.l #dots,filptr
- bsr.s d_int1 ; Draw the data cell
- bsr d_int2 ; Draw the mask cell
-
- bra.s draw_exit
-
- solid: bsr get_mptr ; Is this mask bit set?
- bne.s solid2 ; Yes, skip
-
- move.l #black,filptr
-
- bsr.s d_int1 ; Draw the data cell
- bsr d_int2 ; Draw the mask cell
-
- bra.s draw_exit
-
- solid2: move.l #black,filptr
- bsr.s d_int1 ; Draw the data cell
- move.l #dots,filptr
- bsr d_int2 ; Draw the mask cell
-
- draw_exit:
- tst.w hotflg ; Time to draw the hotspot?
- bne.s d_ex2 ; No, skip
- bsr set_hotspot ; Draw that hotspot
- d_ex2: rts
-
- d_int1:
- move.l screen,a0 ; Get address of screen memory
- moveq #0,d0
- move y,d0
- mulu y_div,d0
- add.w y_off,d0
- addq.w #1,d0
- mulu y_scr,d0
- add.l d0,a0 ; Set pointer to proper scan line
- moveq #0,d0
- move.w x,d0
- mulu #10,d0
- add.w #51,d0
- di1_0: divu #16,d0
- cmp.w #2,res ; High res?
- bne.s col_di
- lsl.w d0
- move.l d0,d1
- swap d1 ; Get remainder to lower word
- ext.l d1
- move.l filptr,a1
- move #8,d3 ; Use d3 as counter (9 scan lines)
-
- di1_1: moveq #0,d2 ; Clear d2
- move.w (a1),d2 ; Get first line of fill pattern
- swap d2
- move.l #$007FFFFF,d7 ; Mask to d7
- lsr.l d1,d2
- or #16,ccr
- roxr.l d1,d7
- and.l d7,0(a0,d0)
- or.l d2,0(a0,d0)
- add.l #80,a0
- subq.w #1,d3
- bmi.s di1ex
- moveq #0,d2
- move.w 2(a1),d2 ; Second line of fill pattern
- swap d2
- move.l #$007FFFFF,d7 ; Mask to d7
- lsr.l d1,d2
- or #16,ccr
- roxr.l d1,d7
- and.l d7,0(a0,d0)
- or.l d2,0(a0,d0)
- add.l #80,a0
- dbf d3,di1_1
- di1ex: rts
-
- col_di:
- lsl.w #2,d0
- move.l d0,d1
- swap d1
- ext.l d1
- move.l filptr,a1
- move #3,d3
-
- col1_1: moveq #0,d2
- move.w 4(a1),d2
- swap d2
- move.l #$007FFFFF,d7
- lsr.l d1,d2
- or #16,ccr
- roxr.l d1,d7
- and.w d7,4(a0,d0)
- and.w d7,6(a0,d0)
- swap d7
- and.w d7,0(a0,d0)
- and.w d7,2(a0,d0)
- or.w d2,4(a0,d0)
- swap d2
- or.w d2,0(a0,d0)
- moveq #0,d2
- move.w 6(a1),d2
- swap d2
- lsr.l d1,d2
- or.w d2,6(a0,d0)
- swap d2
- or.w d2,2(a0,d0)
- add.l #160,a0
- dbf d3,col1_1
- rts
-
- d_int2:
- move.l screen,a0 ; Get address of screen memory
- moveq #0,d0
- move y,d0
- mulu y_div,d0
- add.w y_off,d0
- addq.w #1,d0
- mulu y_scr,d0
- add.l d0,a0 ; Set pointer to proper scan line
- moveq #0,d0
- move.w x,d0
- mulu #10,d0
- add.w #251,d0 ; Now we're drawing on the Mask grid
- bra di1_0
-
- set_hotspot:
- dc.w $A00A ; Hide mouse
- move x_hot,x ; Get hotspot coordinates
- move y_hot,y
- move.l #hotpat,filptr
- bsr d_int1 ; Draw it
- bsr show_mouse ; Show the mouse
- rts
-
- get_iptr:
- moveq #0,d0
- move y,d0
- add.w d0,d0
- add.l #m_image,d0
- bra.s btest
-
- get_mptr:
- moveq #0,d0
- move y,d0
- add.w d0,d0
- add.l #m_mask,d0
- * bra.s btest
-
- btest: move.l d0,a0
- move (a0),d1
- move #15,d0
- sub.w x,d0
- btst d0,d1
- rts
-
- init_col:
- move.b #'0',dvalms
- move.b #'0',mvalms
- move.b #'0',dvalms+1
- move.b #'0',mvalms+1
- move.l #mvalms,a5
- moveq #0,d0
- move fg_col,d0
- bsr.s setdec
- move.l #dvalms,a5
- moveq #0,d0
- move bg_col,d0
- bsr.s setdec
- rts
-
- init_nfrm:
- move.b #'0',fnvlms
- move.b #'0',fnvlms+1
- move.b #'0',spvlms
- move.b #'0',spvlms+1
- move.l #fnvlms,a5
- moveq #0,d0
- move nframs,d0
- bsr.s setdec
- move.l #spvlms,a5
- moveq #0,d0
- move delval,d0
- bsr.s setdec
- rts
-
- setdec: addq.l #1,a5
- setd1: subq.w #1,d0
- bmi.s setd2
- addq.b #1,(a5)
- cmp.b #':',(a5)
- bne setd1
- move.b #'0',(a5)
- addq.b #1,-1(a5)
- bra setd1
- setd2: rts
-
- show_mouse:
- dc.w $A000
- move.l 8(a0),a0
- move #0,(a0)
- dc.w $A009
- rts
-
- open_file:
- clr.w -(sp)
- move.l a5,-(sp)
- move #$3D,-(sp)
- trap #1
- addq #8,sp
- tst.w d0
- rts
-
- read_file:
- move.l a5,-(sp)
- move.l d5,-(sp)
- move fhandl,-(sp)
- move #$3F,-(sp)
- trap #1
- add #12,sp
- tst.l d0
- rts
-
- clos_file:
- move fhandl,-(sp)
- move #$3E,-(sp)
- trap #1
- addq #4,sp
- rts
-
- delete_file:
- move.l a0,-(sp)
- move.w #$41,-(sp)
- trap #1
- addq #6,sp
- rts
-
- chk_anfile:
- clr.w a_good
- moveq #0,d7
- move #31,d6
- chkan1: move.l d7,d0
- bsr lseek
- bmi.s chkan2
- move.l #nfrtst,a5
- move.l #4,d5
- bsr read_file
- bmi.s chkan2
- cmp.w #15,(a5)
- bhi.s chkan2
- cmp.w #15,2(a5)
- bhi.s chkan2
- addq.l #6,d7
- move.l d7,d0
- bsr lseek
- bmi.s chkan2
- bsr read_file
- bmi.s chkan2
- cmp.w #15,(a5)
- bhi.s chkan2
- cmp.w #15,2(a5)
- bhi.s chkan2
- add.l #68,d7
- dbf d6,chkan1
-
- move.l #2368,d0
- bsr lseek
- bmi.s chkan2
- move.l #nfrtst,a5
- move.l #4,d5
- bsr read_file
- bmi.s chkan2
- cmp.w #32,(a5)
- bhi.s chkan2
- cmp.w #99,2(a5)
- bhi.s chkan2
- rts
- chkan2: move.w #-1,a_good
- rts
-
- write_mode:
- move.l #contrl,a5
- move #32,(a5) ; Set writing mode
- move #0,2(a5)
- move #1,6(a5)
- bra vdi
-
- poly_color:
- move.l #contrl,a5
- move #17,(a5) ; vsl_color (Set Polyline Color)
- move #0,2(a5)
- move #1,6(a5)
- bra vdi
-
- poly_type:
- move.l #contrl,a5
- move #15,(a5) ; vsl_type (Set Polyline Type)
- move #0,2(a5)
- move #1,6(a5)
- bra vdi
-
- poly_width:
- move.l #contrl,a5
- move #16,(a5) ; vsl_width (Set Polyline Width)
- move #1,2(a5)
- move #0,6(a5)
- bra vdi
-
- poly_ends:
- move.l #contrl,a5
- move #108,(a5) ; vsl_ends (Set Polyline End Styles)
- move #0,2(a5)
- move #2,6(a5)
- bra vdi
-
- polyline:
- move.l #contrl,a5
- move #6,(a5)
- move pt_num,2(a5)
- move #0,6(a5)
- bra vdi
-
- vsf_color:
- move.l #contrl,a5
- move #25,(a5)
- move #0,2(a5)
- move #1,6(a5)
- bra vdi
-
- vsf_interior:
- move.l #contrl,a5
- move #23,(a5)
- move #0,2(a5)
- move #1,6(a5)
- bra vdi
-
- vsf_style:
- move.l #contrl,a5
- move #24,(a5)
- move #0,2(a5)
- move #1,6(a5)
- bra vdi
-
- exch_button:
- move.l #contrl,a5 ; Point the mouse button routine
- move #125,(a5) ; to an RTS to prevent the AES from
- clr.w 2(a5) ; buffering button presses
- clr.w 6(a5)
- move.l #butrts,14(a5)
- bsr vdi
- move.l 18(a5),badsav
- rts
-
- repl_button:
- move.l #contrl,a5
- move #125,(a5) ; Reset button vector so we can use the
- clr.w 2(a5) ; AES again
- clr.w 6(a5)
- move.l badsav,14(a5)
- bra vdi
-
- sample_mouse:
- move.l #contrl,a5
- move #124,(a5)
- move #0,2(a5)
- move #0,6(a5)
- bra vdi
-
- open_window:
- move.l #w_get,aespb
- move.l #intin,a5
- clr.w (a5)
- move.w #4,2(a5)
- bsr aes
- move.l intout+2,wx
- move.l intout+6,ww
-
- move.l #intin,a5
- move.l #w_crea,aespb ; Create a full-screen window
- clr.w (a5)
- move.l wx,2(a5)
- move.l ww,6(a5)
- bsr aes
- tst.w intout ; Error? (Probably too many windows open)
- bpl.s openwi ; No, continue
- move.w #-1,d0
- rts
- openwi: move intout,whandl
- move.l #w_open,aespb ; Open the window!
- move whandl,(a5) ; a5 is still pointing to intin
- move.l wx,2(a5)
- move.l ww,6(a5)
- bsr aes
- moveq #0,d0
- rts
-
- fsel: tst fsflag
- bne.s fsel1
-
- move.l itmadr,a0 ; Change the "ITEM SELECTOR" text to something
- move.l txtadr,(a0) ; a bit more meaningful
- move itmlen,8(a0)
- or.w #1,-2(a0)
-
- fsel1: move.l #f_sel,aespb ; Let's call fsel_input with opcode 90
- move.l diradr,addrin
- move.l filadr,addrin+4
- bsr aes
-
- tst fsflag
- bne.s fsel2
-
- move.l itmadr,a0 ; Restore the fsel text line
- move.l iasav,(a0)
- and.w #$FE,-2(a0)
- move ilensv,8(a0)
-
- fsel2: rts
-
- set_path:
- clr.w d0 ; Set current drive from output of
- move.l diradr,a0 ; fsel routine
- move.b (a0),d0
- sub.b #65,d0
- move d0,-(sp)
- move #$0E,-(sp)
- trap #1
- addq #4,sp
- move.l diradr,a0 ; Also set pathname from fsel
- addq.l #2,a0
- move.l #pathnm,a1
- move.l #63,d5
- pathlp: tst.b (a0)
- beq.s plx1
- move.b (a0)+,(a1)+
- dbf d5,pathlp
- plx1: move.l #63,d5
- plp2: cmp.b #"\\",-(a1)
- beq.s plx2
- dbf d5,plp2
- plx2: clr.b 1(a1)
- pea pathnm
- move #$3B,-(sp)
- trap #1
- addq #6,sp
- rts
-
- chk_extension:
- move.l filadr,a0 ; Check to see if the chosen filename has
- chke_1: tst.b (a0) ; an extension. If not, add the proper one.
- beq.s setext ; If so, leave it alone
- cmp.b #".",(a0)+
- beq.s nosete
- bra chke_1
- setext: move #4,d0
- setx1: move.b (a1)+,(a0)+
- dbf d0,setx1
- nosete: rts
-
- res_dpath:
- move curdrv,-(sp) ; Reset current drive and pathname
- move #$0E,-(sp)
- trap #1
- addq #4,sp
- move.l #curpth,-(sp)
- move #$3B,-(sp)
- trap #1
- addq #6,sp
- rts
-
- * form_alert
- * Enter with a5= address of definition string
- * d5= number of default box
-
- alert: move.l a5,addrin ; Set address of string
- move d5,intin ; Set default box
- move.l #f_alrt,aespb ; Display alert box
- bra aes
-
- * Dialog box drawing routine
-
- drawbx: move.l #f_cntr,aespb ; First, let's call form_center
- bsr aes
-
- move.l #intout,a0
- move.l 2(a0),cx
- move.l 6(a0),cw
- subq.w #2,cx
- subq.w #2,cy
- addq.w #6,cw
- addq.w #6,ch
-
- tst diflag
- bne.s draw_1
-
- clr.w intin
- bsr.s dial
-
- draw_1: move.l #intin,a5
- move.l #o_cdrw,aespb ; Objc_draw
- move #0,(a5) ; Root object gets drawn first
- move #5,2(a5) ; Up to 5 levels of subordinate objects
- move.l cx,4(a5) ; (dial subroutine sets a5->intin)
- move.l cw,8(a5)
- bra aes
-
- dial: move.l #f_dial,aespb ; Form_dial
- move.l #intin,a5
- clr.l 2(a5) ; No growing/shrinking boxes, so just
- clr.l 6(a5) ; zero out the start coordinates
- move.l cx,10(a5)
- move.l cw,14(a5)
- bra aes
-
- obdraw: move.l #o_cdrw,aespb
- move.l #intin,a0
- move o_indx,(a0)
- move #1,2(a0)
- move.l x_obj1,4(a0)
- move.l w_obj,8(a0)
- move.l #editbx,addrin
- bra.s aes
-
- formdo: move.l #f_do,aespb ; Call form_do to get user input
- clr.w intin ; No editable text field
- bra.s aes ; Do it!
-
- objoff: move.l #o_coff,aespb ; Calculate clipping rectangle and re-draw
- bsr.s aes ; an object. intin must be set to the index
- move.l #o_cdrw,aespb ; of the object to be drawn, addrin to the
- move.l #intin+2,a5 ; address of the parent object tree
- move #0,(a5)+
- move intout+2,(a5)
- addq.w #1,(a5)+
- move intout+4,(a5)
- addq.w #1,(a5)+
- moveq #0,d0
- move intin,d0
- mulu #24,d0
- add.l addrin,d0
- move.l d0,a0
- move 20(a0),(a5)
- subq.w #2,(a5)+
- move 22(a0),(a5)
- subq.w #2,(a5)+
- bra.s aes
-
- * VDI and AES subroutines
-
- vdi: move vhandl,12(a5)
- vdi1: move.l #vdipb,d1
- move.l #$73,d0
- trap #2
- butrts: rts
-
- aes: move.l #aespb,d1
- move.l #$C8,d0
- trap #2
- rts
-
-
- my_vblank:
- movem.l d0/a0-a3,-(sp) ; Save registers
- cmp.b #2,sshiftmod ; High res?
- beq.s vbl1 ; Yes, skip the res check
- tst lowflg ; Did we find the Set Preferences dialog?
- bne.s vbl1
- move.l res_optr,a0
- btst #0,1(a0) ; SELECTED? (Changing resolution?)
- beq.s vbl1 ; No, continue
- move.l res_okptr,a0 ; Now check the "OK" button
- btst #0,1(a0) ; SELECTED? (_really_ changing?)
- beq.s vbl1 ; Not yet!
- move.l line_a,a0
- btst #0,but_stat(a0) ; Let go of the left button yet???
- bne.s vbl1 ; The suspense is killing me!
-
- move.l sysvc1,$70 ; Remove the vertical blank interrupt
- clr insflg ; Clear installed flag
- move.l $502,a0
- cmp.l #$ABADBABE,2(a0)
- bne fall_thru
- move.l 22(a0),$B4 ; The infamous kludge for ALT.ACC
- bra fall_thru ; And bail
-
- vbl1: tst vbi_on ; Are we interrupting?
- beq fall_thru ; Nope!
- move.l line_a,a0
- tst.b ignore(a0) ; Ignore the mouse?
- bne.s fall_thru ; Do so
-
- ckarrw: move.l sprtad,a0 ; The address of the mouse sprite definition
- move.l a0,a2
- move.l #arrow_data,a1
- move #15,d0 ; 16 longwords
- vbl2: cmp.l (a0)+,(a1)+ ; Did somebody put an arrow in here???
- bne.s vbl4 ; No, I guess not
- dbf d0,vbl2
-
- tst onoff
- bne.s vbl2a
- move.l #m_form2,a3
- bra.s vbl2b
- vbl2a: bsr which_mouse
- vbl2b: bsr.s stuff_it
- bsr force_it ; Force the OS to show the mouse
-
- vbl4:
- tst onoff ; Animation on?
- beq.s fall_thru ; Nope, bail
- subq.w #1,vbtimr ; Decrement animation timer
- bpl.s fall_thru ; Not time yet, bail
- move.w delval,vbtimr ; Reset timer
- move.w nframs,d0 ; Get number of frames in the loop
- subq.w #1,d0
- cmp.w moucnt,d0 ; Are we at the last frame?
- bhi.s vbl5 ; No, skip ahead
- clr.w moucnt ; Clear the frame counter
- bra.s vbl6
- vbl5: addq.w #1,moucnt ; Increment frame counter
- vbl6: bsr.s which_mouse ; Get pointer to mouse data
- move.l sprtad,a2
- bsr.s stuff_it
- bsr.s force_it
-
- fall_thru:
- movem.l (sp)+,d0/a0-a3 ; Restore them registers, pal
- sysj1: jmp $DEADBEEF ; Jump to system VBI routine
- sysvc1 = sysj1+2
-
- stuff_it:
- move.l (a3),-10(a2) ; Caught you red-handed! Set the hot spot
- moveq #0,d0
- move 6(a3),d0 ; Get mask color
- bsr.s vb_color ; Go adjust the color
- move d0,-4(a2) ; Set the color
- move 8(a3),d0 ; Get data color
- bsr.s vb_color ; Adjust it
- move d0,-2(a2) ; Set it
- move.l a3,a0
- add.l #10,a0 ; The data is stored in sprite format
- move.l a3,a1
- add.l #42,a1 ; --- alternating words of data and mask
- move #15,d0
- stuff2: move (a0)+,(a2)+ ; Take that!
- move (a1)+,(a2)+ ; The mouse thief strikes!
- dbf d0,stuff2
- rts
-
- which_mouse:
- moveq #0,d0
- move.w moucnt,d0
- mulu #74,d0
- add.l #mouse_array,d0
- move.l d0,a3
- rts
-
- vb_color:
- move.l valsav,a0
- add.l d0,a0 ; Add color value to start of table
- move.b (a0),d0 ; Get adjusted color
- rts
-
- force_it:
- bsr.s pac_butt
- tst mouse_x(a0) ; Are we at the left edge of the screen?
- bne.s force1 ; No, skip over
- addq #1,mouse_x(a0) ; Move it right
- move.b #$FF,anipac+1 ; Move it back left
- bra.s pac_send
- force1: subq #1,mouse_x(a0) ; Move it left
- move.b #$01,anipac+1 ; Move it back right
- force2: bra.s pac_send
-
- pac_butt:
- move.b #$F8,anipac
- move.l line_a,a0
- btst.b #0,but_stat(a0)
- beq.s pacb2
- bset.b #1,anipac
- pacb2: btst.b #1,but_stat(a0)
- beq.s pacb3
- bset.b #0,anipac
- pacb3: rts
-
- pac_send:
- move.l #anipac,a0
- move.w sr,srsave
- or.w #$700,sr
- j_add2: jsr $DEADBEEF
- sysvc2 = j_add2+2
- move.w srsave,sr
- rts
-
-
- save_vbv:
- move.l ipl_vec,sysvc1
- move.l #my_vblank,ipl_vec
-
- move.l $502,a0
- cmp.l #$ABADBABE,2(a0)
- bne.s getmsv
- move.l 18(a0),a0
- bra.s getms1
- getmsv: move.w #34,-(sp) ; Xbios kbdvbase
- trap #14
- addq #2,sp
- move.l d0,a0
- move.l 16(a0),a0 ; Save mouse interrupt vector
- getms1: move.l a0,sysvc2
- rts
-
-
- .data
- .even
-
- vdipb: dc.l contrl,intin,ptsin,intout,ptsout
- aespb: dc.l contrl,global,intin,intout,addrin,addrout
-
- a_init: dc.w 10,0,1,0,0
- e_mesg: dc.w 23,0,1,1,0
- e_timr: dc.w 24,2,1,0,0
- m_reg: dc.w 35,1,1,1,0
- g_hand: dc.w 77,0,5,0,0
- g_mous: dc.w 78,1,1,1,0
- r_obfx: dc.w 114,1,1,1,0
- f_dial: dc.w 51,9,1,1,0
- f_alrt: dc.w 52,1,1,1,0
- f_cntr: dc.w 54,0,5,1,0
- f_do: dc.w 50,1,2,1,0
- o_cdrw: dc.w 42,6,1,1,0
- o_cfnd: dc.w 43,4,1,1,0
- o_coff: dc.w 44,1,3,1,0
- f_sel: dc.w 90,0,2,2,0
- w_crea: dc.w 100,5,1,0,0
- w_open: dc.w 101,5,5,0,0
- w_clos: dc.w 102,1,1,0,0
- w_del: dc.w 103,1,1,0,0
- w_get: dc.w 104,2,5,0,0
- w_updt: dc.w 107,1,1,0,0
-
- ob_inx: dc.w savebt,loadbt,clrmbt,clrdbt,invdbt,invmbt
- dc.w upbt,leftbt,downbt,ritebt,mirdbt,mirmbt,rotbt
- dc.w exitbt,instbt,remvbt,undobt,cdowbt,cupbt,colttl
- dc.w frmttl,frdown,frup,anonof
- o_dum: dc.w 0
- oi_len = (o_dum-ob_inx)/2
-
- rtn_table:
- dc.l save,load,clr_mask,clr_data,inv_data,inv_mask
- dc.l up,left,down,right,mir_data,mir_mask,rotate
- dc.l exit,install,remove,undo,colr_down,colr_up,sw_fgbg
- dc.l sw_anttl,ani_down,ani_up,ani_onoff
-
- low_val:
- dc.b 0,15,1,2,4,6,3,5,7,8,9,10,12,14,11,13
- med_val:
- dc.b 0,15,1,2,15,15,15,15,15,15,15,15,15,15,15,15
- hi_val:
- dc.b 0,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
-
- y_off: dc.w 100
- y_bot: dc.w 260
-
- chang1: dc.w 180
- chang2: dc.w 140
-
- y_div: dc.w 10
-
- y_scr: dc.w 80
-
- celsiz: dc.w 9
-
- fillst: dc.w 2
-
- filhot: dc.w 5
-
- empty: dc.w $0000,$0000
- mempty: dc.w $0000,$0000
-
- dots: dc.w $AA80,$0000
- mdots: dc.w $0000,$FF80
-
- black: dc.w $FF80,$FF80
- mblack: dc.w $FF80,$FF80
-
- hotpat: dc.w $5500,$FF80
- mhotpt: dc.w $FF80,$0000
-
- mouse_form:
- x_hot: dc.w 0
- y_hot: dc.w 0
- planes: dc.w 1
- fg_col: dc.w 0
- bg_col: dc.w 1
- m_mask:
- dc.w $C000,$E000,$F000,$F800
- dc.w $FC00,$FE00,$FF00,$FF80
- dc.w $FFC0,$FFE0,$FE00,$EF00
- dc.w $CF00,$8780,$0780,$0380
- m_image:
- dc.w $0000,$4000,$6000,$7000
- dc.w $7800,$7C00,$7E00,$7F00
- dc.w $7F80,$7C00,$6C00,$4600
- dc.w $0600,$0300,$0300,$0000
-
- arrow_data:
- dc.w $C000,$0000,$E000,$4000 ; Data for arrow cursor in sprite
- dc.w $F000,$6000,$F800,$7000 ; format (alternating words of mask
- dc.w $FC00,$7800,$FE00,$7C00 ; and data)
- dc.w $FF00,$7E00,$FF80,$7F00
-
- dc.w $FFC0,$7F80,$FFE0,$7C00
- dc.w $FE00,$6C00,$EF00,$4600
- dc.w $CF00,$0600,$8780,$0300
- dc.w $0780,$0300,$0380,$0000
-
- * TEDINFO structures
-
- tinf0: dc.l stlog,dummy,dummy ; ST-Log Presents
- dc.w 5,6,1,$1000,0,-1,17,1
- tinf1: dc.l copyrt,dummy,dummy ; Copyright 1987
- dc.w 5,6,2,$1000,0,-1,15,1
- tinf2: dc.l footbl,dummy,dummy ; Little Green Footballs
- dc.w 5,6,2,$1000,0,-1,23,1
- tinf3: dc.l dcolms,dummy,dummy ; Data/Mask color message
- dc.w 5,6,2,$1180,0,-1,11,1
- tinf4: dc.l framms,dummy,dummy ; Frame/#/Speed message
- dc.w 5,6,2,$1180,0,-1,6,1
- tinf5: dc.l anofms,dummy,dummy ; Animation ON/OFF message
- dc.w 5,6,2,$1180,0,-1,14,1
-
- tinf10: dc.l dcolms,dummy,dummy ; Low res Data/Mask message
- dc.w 5,6,2,$1180,0,-1,11,1
-
- * Editor dialog box
-
- editbx: dc.w -1,1,32,G_BOX,NONE,SHADOWED
- dc.l $FF1100
- dc.w 0,0,76,20
-
- dc.w 5,2,4,G_STRING,NONE,SELECTED
- dc.l mousms
- dc.w 0,0,76,2
-
- dc.w 3,-1,-1,G_TEXT,NONE,NORMAL
- dc.l tinf0
- dc.w 1,0,13,2
-
- dc.w 4,-1,-1,G_TEXT,NONE,NORMAL
- dc.l tinf1
- cop_co: dc.w 57,0,17,1
-
- dc.w 1,-1,-1,G_TEXT,NONE,NORMAL
- dc.l tinf2
- footco: dc.w 57,1,17,1
-
- dc.w 6,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l instms
- dc.w 66,3,8,1
-
- dc.w 7,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l remvms
- dc.w 66,5,8,1
-
- dc.w 8,-1,-1,G_BOXTEXT,NONE,NORMAL
- dc.l tinf3
- dc.w 65,7,10,1
-
- dc.w 9,-1,-1,G_BOXCHAR,NONE,NORMAL
- dc.l $2FF1100
- dc.w 65,8,3,2
-
- dc.w 10,-1,-1,G_BUTTON,SELECTABLE,NORMAL
- valadr: dc.l dvalms
- col_co: dc.w 68,8,4,2
-
- dc.w 11,-1,-1,G_BOXCHAR,NONE,NORMAL
- dc.l $1FF1100
- dc.w 72,8,3,2
-
- dc.w 12,-1,-1,G_BOXCHAR,NONE,SHADOWED
- dc.l $1FF1100
- upco: dc.w 57,9,2,1
-
- dc.w 13,-1,-1,G_BOXCHAR,NONE,SHADOWED
- dc.l $4FF1100
- leftco: dc.w 53,11,2,1
-
- dc.w 14,-1,-1,G_BOXCHAR,NONE,SHADOWED
- dc.l $3FF1100
- riteco: dc.w 61,11,2,1
-
- dc.w 15,-1,-1,G_BOXTEXT,NONE,NORMAL
- dc.l tinf4
- dc.w 65,11,10,1
-
- dc.w 16,-1,-1,G_BOXCHAR,NONE,NORMAL
- dc.l $2FF1100
- dc.w 65,12,3,2
-
- dc.w 17,-1,-1,G_BUTTON,SELECTABLE,NORMAL
- anival: dc.l frvlms
- dc.w 68,12,4,2
-
- dc.w 18,-1,-1,G_BOXCHAR,NONE,NORMAL
- dc.l $1FF1100
- dc.w 72,12,3,2
-
- dc.w 19,-1,-1,G_BOXCHAR,NONE,SHADOWED
- dc.l $2FF1100
- downco: dc.w 57,13,2,1
-
- dc.w 20,-1,-1,G_STRING,NONE,SELECTED
- dc.l dat_ms
- datco: dc.w 11,14,6,1
-
- dc.w 21,-1,-1,G_STRING,NONE,SELECTED
- dc.l maskms
- mskco: dc.w 36,14,6,1
-
- dc.w 22,-1,-1,G_BOXTEXT,NONE
- anistt: dc.w NORMAL
- dc.l tinf5
- dc.w 65,14,10,1
-
- dc.w 23,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l savems
- dc.w 2,16,7,1
-
- dc.w 24,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l clrdms
- dc.w 11,16,12,1
-
- dc.w 25,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l invdms
- dc.w 24,16,12,1
-
- dc.w 26,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l mirdms
- dc.w 37,16,12,1
-
- dc.w 27,-1,-1,G_BUTTON,SELECTABLE
- extstt: dc.w SHADOWED
- dc.l exitms
- dc.w 67,16,7,3
-
- dc.w 28,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l undoms
- dc.w 58,16,7,3
-
- dc.w 29,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l rotms
- dc.w 50,16,7,3
-
- dc.w 30,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l loadms
- dc.w 2,18,7,1
-
- dc.w 31,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l clrmms
- dc.w 11,18,12,1
-
- dc.w 32,-1,-1,G_BUTTON,SELECTABLE,SHADOWED
- dc.l invmms
- dc.w 24,18,12,1
-
- dc.w 0,-1,-1,G_BUTTON,$21,SHADOWED
- dc.l mirmms
- dc.w 37,18,12,1
-
- ed_adr: dc.l editbx
-
- objnum = (ed_adr-editbx)/24-1
-
- * Low-res dialog box
-
- lowbox: dc.w -1,1,14,G_BOX,NONE,SHADOWED
- dc.l $FF1100
- dc.w 0,0,38,14
-
- dc.w 2,-1,-1,G_STRING,NONE,SELECTED
- dc.l lttlms
- dc.w 0,0,38,2
-
- dc.w 3,-1,-1,G_STRING,NONE,NORMAL
- dc.l lms1
- dc.w 1,3,23,1
-
- dc.w 4,-1,-1,G_BUTTON,$5
- loistt: dc.w NORMAL
- dc.l loadms
- dc.w 26,3,10,1
-
- dc.w 5,-1,-1,G_STRING,NONE,NORMAL
- dc.l lms2
- dc.w 1,4,18,1
-
- dc.w 6,-1,-1,G_BUTTON,$5
- losstt: dc.w NORMAL
- dc.l savems
- dc.w 26,5,10,1
-
- dc.w 7,-1,-1,G_STRING,NONE,NORMAL
- dc.l lms3
- dc.w 1,6,22,1
-
- dc.w 8,-1,-1,G_BUTTON,$5
- lorstt: dc.w NORMAL
- dc.l remvms
- dc.w 26,7,10,1
-
- dc.w 9,-1,-1,G_STRING,NONE,NORMAL
- dc.l lms4
- dc.w 1,7,19,1
-
- dc.w 10,-1,-1,G_STRING,NONE,NORMAL
- dc.l lms5
- dc.w 1,8,20,1
-
- dc.w 11,-1,-1,G_BOXTEXT,TOUCHEXIT
- locstt: dc.w NORMAL
- dc.l tinf10
- dc.w 7,10,10,1
-
- dc.w 12,-1,-1,G_BUTTON,$7
- loestt: dc.w NORMAL
- dc.l exitms
- dc.w 26,10,10,2
-
- dc.w 13,-1,-1,G_BOXCHAR,TOUCHEXIT
- lodstt: dc.w NORMAL
- dc.l $2FF1100
- dc.w 7,11,3,2
-
- dc.w 14,-1,-1,G_BUTTON,NONE,NORMAL
- lovadr: dc.l dvalms
- dc.w 10,11,4,2
-
- dc.w 0,-1,-1,G_BOXCHAR,$60
- loustt: dc.w NORMAL
- dc.l $1FF1100
- dc.w 14,11,3,2
-
- lo_adr: dc.l lowbox
-
- lo_num = (lo_adr-lowbox)/24-1
-
-
- * Text for dialog objects
-
- stlog: dc.b 'ST-Log Presents:',0
- copyrt: dc.b 'Copyright 1987',0
- footbl: dc.b 'Little Green Footballs'
- dummy: dc.b 0
-
- mousms: dc.b ' MOUSE-KA-MANIA! by Charles F. Johnson',0
- instms: dc.b 'Install',0
- remvms: dc.b 'Remove',0
- savems: dc.b 'Save',0
- loadms: dc.b 'Load',0
- clrdms: dc.b 'Clear Data',0
- clrmms: dc.b 'Clear Mask',0
- invdms: dc.b 'Invert Data',0
- invmms: dc.b 'Invert Mask',0
- mirdms: dc.b 'Mirror Data',0
- mirmms: dc.b 'Mirror Mask',0
- rotms: dc.b 'Rotate',0
- exitms: dc.b 'EXIT',0
- undoms: dc.b 'UNDO',0
- dat_ms: dc.b ' DATA',0
- maskms: dc.b ' MASK',0
- dvalms: dc.b '01',0
- mvalms: dc.b '00',0
- frvlms: dc.b '01',0
- fnvlms: dc.b '01',0
- spvlms: dc.b '00',0
- blnkms: dc.b ' ',0
-
- dcolms: dc.b 'Data Color',0
- mcolms: dc.b 'Mask Color',0
- framms: dc.b 'Current Frame',0
- frmnms: dc.b '# of Frames',0
- speems: dc.b 'Delay',0
- anonms: dc.b 'Animation ON',0
- anofms: dc.b 'Animation OFF',0
-
- lttlms: dc.b " Mouse-Ka-Mania by Charles F. Johnson ",0
- lms1: dc.b "The Editor doesn't work",0
- lms2: dc.b "in low resolution.",0
- lms3: dc.b "However, you may still",0
- lms4: dc.b "install or remove a",0
- lms5: dc.b "custom mouse cursor!",0
-
- .even
-
- itmtxt: dc.b 'ITEM SELECTOR'
-
- restxt: dc.b 'Low',0,'Medium',0,'High'
-
- datext: dc.b ':\\*.DAT',0
- aniext: dc.b ':\\*.MKM',0
-
- i_save: dc.b ' Save Mouse Data to which File? '
- is_dum: dc.b 0
- is_len = (is_dum-i_save)*8
-
- i_asav: dc.b ' Save Animation to which File? '
- ia_dum: dc.b 0
- iaslen = (ia_dum-i_asav)*8
-
- i_load: dc.b ' Load Mouse Data from which File? '
- il_dum: dc.b 0
- il_len = (il_dum-i_load)*8
-
- i_aloa: dc.b ' Load Animation from which File? '
- ial_du: dc.b 0
- iallen = (ial_du-i_aloa)*8
-
- dat_or_ani:
- dc.b '[2][ Which type of file? | ]'
- dc.b '[Animation|Single Frame]'
-
- notani:
- dc.b '[3][ This is not a Mouse-Ka-Mania |'
- dc.b ' animation file. | ]'
- dc.b '[ Oops! ]'
-
- exist:
- dc.b '[3][ The file '
- exname: dc.b ' | already exists! | |'
- dc.b ' Over-write it?| ]'
- dc.b '[ Yes | No ]'
-
- dskful: dc.b '[3][ This disk is full! | ][ Oops! ]'
-
- accmsg: dc.b ' Mouse-ka-Mania!',0
-
- lowdef: dc.b '\\MOUSELOW.DEF',0
- meddef: dc.b '\\MOUSEMED.DEF',0
- hidef: dc.b '\\MOUSEHI.DEF',0
-
- anipac: dc.b 0,0,0,0
-
- .bss
- .even
-
- line_a: ds.l 1
- valsav: ds.l 1
- temp: ds.l 1
- o_asav: ds.l 1
- itmadr: ds.l 1
- iasav: ds.l 1
- txtadr: ds.l 1
- diradr: ds.l 1
- filadr: ds.l 1
- badsav: ds.l 1
- sprtad: ds.l 1
- screen: ds.l 1
- filptr: ds.l 1
- nfrtst: ds.l 1
- res_optr:
- ds.l 1
- res_okptr:
- ds.l 1
-
- scncnt: ds.w 1
- srsave: ds.w 1
- fsflag: ds.w 1
- lowflg: ds.w 1
- o_res: ds.w 1
- res: ds.w 1
- menuid: ds.w 1
- curdrv: ds.w 1
- colflg: ds.w 1
- adflag: ds.w 1
- antflg: ds.w 1
- shfflg: ds.w 1
- onoff: ds.w 1
- vbi_on: ds.w 1
- vbtimr: ds.w 1
- moucnt: ds.w 1
- franum: ds.w 1
- nframs: ds.w 1
- delval: ds.w 1
-
- diflag: ds.w 1
- insflg: ds.w 1
- itmlen: ds.w 1
- ilensv: ds.w 1
- numrtn: ds.w 1
- butflg: ds.w 1
- o_indx: ds.w 1
- hotflg: ds.w 1
- m_flag: ds.w 1
- d_flag: ds.w 1
- a_good: ds.w 1
- pt_num: ds.w 1
- ghandl: ds.w 1
- vhandl: ds.w 1
- whandl: ds.w 1
- fhandl: ds.w 1
- butsav: ds.w 1
- mousex: ds.w 1
- mousey: ds.w 1
- x: ds.w 1
- y: ds.w 1
- cx: ds.w 1
- cy: ds.w 1
- cw: ds.w 1
- ch: ds.w 1
- wx: ds.w 1
- wy: ds.w 1
- ww: ds.w 1
- wh: ds.w 1
- x_obj1: ds.w 1
- y_obj1: ds.w 1
- x_obj2: ds.w 1
- y_obj2: ds.w 1
- w_obj: ds.w 1
- h_obj: ds.w 1
-
- l_type: ds.w 1
- l_colr: ds.w 1
- d_mode: ds.w 1
- l_strt: ds.w 1
- l_end: ds.w 1
- l_wid: ds.w 1
- f_type: ds.w 1
- f_colr: ds.w 1
- f_patt: ds.w 1
-
- * GEM arrays
-
- contrl: ds.w 12
- intin: ds.w 128
- ptsin: ds.w 128
- intout: ds.w 128
- ptsout: ds.w 128
- global:
- apvrsn: ds.w 1
- apcont: ds.w 1
- apid: ds.w 1
- apprvt: ds.l 1
- apptre: ds.l 1
- ap1rsv: ds.l 1
- ap2rsv: ds.l 1
- ap3rsv: ds.l 1
- ap4rsv: ds.l 1
-
- addrin: ds.w 128
- addrout:ds.w 128
-
- m_form2:
- ds.b 74 ; The installed mouse form
-
- hotsav:
- ds.l 1 ; Hot spot undo
-
- mouse_save:
- ds.w 32 ; Undo buffer
-
- m_rotate:
- ds.w 32 ; Rotation buffer
-
- mouse_array:
- ds.b 74*32 ; Animation array
-
- savfil: ds.b 16
- svafil: ds.b 16
- lodfil: ds.b 16
- loafil: ds.b 16
-
- savdir: ds.b 64
- svadir: ds.b 64
- loddir: ds.b 64
- loadir: ds.b 64
-
- pathnm: ds.b 64
- curpth: ds.b 64
-
- mspipe: ds.b 32
-
- dta: ds.b 44
-
- ds.l 300 ; Reserve 1200 bytes for stack
- ustack: ds.l 1
- ds.w 10
-